Hallo zusammen,
kann man auch Datensätze im TYPO3-BackEnd darstellen bzw. editieren die keine pid und/oder cruser_id haben?
Zu Hintergrund: ich möchte über ADOdb und dbal eine Tabelle aus einer externen Datenbank benutzen. Ich kann aber keine weiteren Felder in dieser Tabelle anlegen. Ergo habe ich kein pid-Feld oder cruser_id-Feld in der Tabelle. Fehlen mir diese Felder, stellt TYPO3 die Records nicht im BackEnd an. Habt Ihr eine Idee, wie ich dieses Problem beheben kann?
Über ein paar Ideen wäre ich super dankbar!
Der André
Hallo,
eigentlich sollten die Datensätze dann auf der root-Seite auftauchen, die hat ja ID 0, oder täusch ich mich da?
georg
m.E. dürfte das SQL-Fehler ergeben, da pid immer abgefragt wird. Daher die Frage: ist es eine Ext ?
Ich denke du musst das TCA manipulieren und die Ansicht vorgeben.
Hallo,
Georg ich fürchte das geht nicht und Steffen hat recht, denn die pid und die cruiser_id scheinen "Pflichfelder" zu sein. Ich denke Typo3 wird noch ein paar andere Dinge vermissen.
steffenk schrieb
m.E. dürfte das SQL-Fehler ergeben, da pid immer abgefragt wird. Daher die Frage: ist es eine Ext ?
Ich denke du musst das TCA manipulieren und die Ansicht vorgeben.
Grundsätzlich würde ich es gerne als Extension erstellen um die Updatefähigkeit des Systems zu erhalten und das Ganze reproduzierbar für andere Installtionen zu machen.
Ich verstehe den letzten Satz nicht so ganz. Die TCA muss ich ja eigentlich für fast alle Extension verändern bzw erweitern? Oder was meinst Du?
ich meine damit, das die Datensätze im BE nach den Definitionen im TCA angezeigt werden, also welche Felder, was ist label etc.
u.U. muss man einen hook schreiben, der bei dieser Tabelle die sql-query abändert - hab da leider keine Erfahrung mit.
Also ich hab's jetzt gelöst aber ob das Logisch ist soll bitte jemand anderes beurteilen. Ich habe folgendes getan. Da die Tabelle mit dbal aus einer externen Datenbank kommt, habe ich ein Mapping für sie angelegt. In diesem Mapping habe ich die pid mit fest vorgegeben. das sieht dann so aus:
$TYPO3_CONF_VARS['EXTCONF']['dbal']['mapping'] = array(
'meineExterneTabelle' => array (
'mapTableName' => 'meinExternerTabellenname',
'mapFieldNames' => array(
'pid' => 2,
'cruser_id' => 1
)
)
Mit "meineExterneTabelle" und "meinExternerTabellenname" ließe sich sogar ein völlig andere Tabelle der internen Tabelle zuordnen. Bei mir heißen beide gleich.
Damit funktioniert es soweit. Leider habe ich mit der dbal-Verbindung immer noch merkwürdige Probleme. So kann ich zwar die records sehen und editieren und auch löschen. Einen neuen record anlegen kann ich aber nicht. Es kommt keine Fehlermeldung, der record wird aber trotzdem nicht angelegt...
Das hier ist also leider noch nicht ganz fertig 😢
finde ich sehr interessant, das man mapping machen kann, wusste ich noch nicht. Ist das dbal-spezifisch ? Wo hast Du das her ?
das mit dem neuen record ist strange, wenn update und select gehen. Kannst Du Dir denn das debuggen lassen ?
steffenk schrieb
finde ich sehr interessant, das man mapping machen kann, wusste ich noch nicht. Ist das dbal-spezifisch ? Wo hast Du das her ?
Ich finde das einigermaßen unlogisch und doch recht praktisch. Das mappiing ist dbal spezifisch.
Wie ich auf die Idee gekommen bin das zu versuchen? Wenn ich in meinen zwölf Jahren als Entwickler irgendwas gelernt habe, dann ist es das unlogische zu versuchen. Und bisher habe damit fast immer einen Weg oder zumindest einen Hinweis gefunden, wenn die Logik versagt hat.
steffenk schrieb
das mit dem neuen record ist strange, wenn update und select gehen. Kannst Du Dir denn das debuggen lassen ?
Ist bei diesem Projekt nicht das weiter wild, denn die Tabellen sind jetzt eh 'readOnly' => '1' und meine Zeit knapp. Daher muss ich mich ein andermal damit auseinander setzen.
Dafür habe ich ein neues interessantes Problem. Mir ist klar, dass dbal keine Joins zwischen der internen und der externen Tabelle machen kann. Leider klappt das auch nicht so richtig innerhalb der externen Tabelle.
"clip_partner_index" => Array (
"exclude" => 1,
"label" => "LLL:EXT:extdata/locallang_db.xml:clips.clip_partner_index",
"config" => Array (
"type" => "select",
"foreign_table" => "partner",
"foreign_table_where" => "ORDER BY partner.uid",
"size" => 1,
"minitems" => 0,
"maxitems" => 1,
)
),
In der Listenansicht zeigt T3 brav den Partnernamen anstatt der Partner ID. Wenn ich auf den Bleistift klicke - wo man eh nichts editieren kann weil die DB ja readOnly ist - kommt folgende Fehlermeldung:
DBAL fatal error: Tables in this list "partner,pages" didn't use the same DB handler!
Was zur Hölle sucht T3 jetzt schon wieder in der pages Tabelle? Man den record doch eh nicht editieren... Total nervig.
Wie immer wenn ihr ne Idee habt her damit, denn ich dreh bald durch :o
Viele Grüße aus Köln
und was ist, wenn Du ins Control-Array schreibst
"readonly" => 1
?
oder mit editlock ...
https://docs.typo3.org/m/typo3/reference-tca/main/en-us/Index.html
Hab ich doch? Oder meinst Du die schreibweise?
Also das 'readOnly' => '1' im Control-Array scheint zu funktionieren, denn der Bleistift hat einen roten Kreis mit einem X darauf und die im Editorformular habe ich nur noch einen schließen Button. Trotzdem versucht er irgendwie einen Join zwischen der externen Hilfstabelle "partner" und der internen "pages" Tabelle zu machen...
Noch eine andere Frage:
Hast Du eine Idee wie ich die anzuzeigenden Datensätze filtern kann? Also "select x, y from clips where partner_index = '117'".
nein, leider nicht.
Die Abfrage wird über diese Funktion realisiert:
t3lib_BEfunc::exec_foreign_table_where_query($fieldValue,$field,$TSconfig,$pF)
da siehst Du wie es funktioniert 😉
Alles klar, danke. Bin jetzt leider erst mal drei Tage außer gefecht gesetzt. Freitag geht's weiter! Ich werde berichten...