16. 10. 2016, 13:51

Hallo,

ich habe ein kleines Problem, an dem ich schon eine ganze Weile tüftle:

Ich habe eine Extension, die eine Klasse Betrieb hat. Diese hat mehrere Unterklassen. Einem fe_user kann man Betriebe zuordnen. Dafür gibt es im TCA je Unterklasse ein IRRE-Column, also z.B. "Höfe", "Kleinerzeuger". Das habe ich schon hinbekommen.
Nun möchte ich aber, dass es für jede der Unterklassen im Backend einen Ordner gibt, damit es übersichtlicher ist. Über das Page TSConfig habe ich es nicht hinbekommen, da man hier den extbase-type des erstellten Datensatzes prüfen müsste. Das scheint per TS-CASE nicht zu funktionieren.
Mein nächster Ansatz war es, einen Hook zu schreiben. Ich habe dazu "processDatamap_preProcessFieldArray" verwendet und wenn sich in FE_Users etwas verändert hat, die Betriebe durchgegangen und habe die PIDs gesetzt. Das läuft, allerdings nicht beim ersten Mal (also erst, wenn der fe_user das zweite Mal gespeichert wird). Außerdem wäre es wohl sinnvoller, direkt auf die Betriebe zu prüfen als auf fe_users.
Deshalb habe ich "processDatamap_afterDatabaseOperations" probiert. In der ext_tables.php habe ich je nach TCA-Feld den extbase_type automatisch vorgegeben:

  1. $GLOBALS['TCA']['fe_users']['columns']['kleinerzeuger']['config']['foreign_match_fields'] = array("tx_extbase_type" => "Tx_SgVkh_Kleinerzeuger");
  2. $GLOBALS['TCA']['fe_users']['columns']['kleinerzeuger']['config']['foreign_record_defaults'] = array("tx_extbase_type" => "Tx_SgVkh_Kleinerzeuger");
  3.  
  4. $GLOBALS['TCA']['fe_users']['columns']['hoefe']['config']['foreign_match_fields'] = array("tx_extbase_type" => "Tx_SgVkh_Hof");
  5. $GLOBALS['TCA']['fe_users']['columns']['hoefe']['config']['foreign_record_defaults'] = array("tx_extbase_type" => "Tx_SgVkh_Hof");
(In den foreign_record_defaults habe ich auch versucht, pid zu setzen, was leider nicht ging.)

Die aktuelle Hook-Funktion sieht so aus:

  1. public function processDatamap_afterDatabaseOperations($action, $table, $uid, array $fieldArray, \TYPO3\CMS\Core\DataHandling\DataHandler &$pObj){
  2. echo "<br><br><br><br>";
  3. if ($table == 'tx_sgvkh_domain_model_betrieb') {
  4. if ($action=="new") {
  5. $betrieb = $fieldArray;
  6. print_r($betrieb);
  7. }
  8. }
  9. }


Ich bekomme zwar den neu angelegten Datensatz augegeben, aber leider stimmt der extbase_type nicht. Es wird die Hauptklasse angegeben, aber nicht die durch das TCA (s.o.) vorgegebene Unterklasse. Deshalb kann ich so die pid nicht korrekt zuordnen.

Hat jemand einen Rat, wie ich das hinbekommen kann?