Hallo,
ich dachte, heute, am 1. Advent, geht mir ein Licht auf! Aber denkste, hat auch nicht geholfen ;-)
Vielleicht erhalte ich ja hier im Forum die "Erleuchtung" - wäre schön! :-)
Aufgabenstellung:
In den Plugin-Einstellungen kann über ein Select-Feld ein bestimmtes (Segel-)Revier ausgewählt werden. Aufgrund dieser Auswahl wird das BE-Formular neu geladen, und es sollen alle Gebiete / Regionen des ausgewählten Reviers angezeigt werden.
Domain Model:
MainRegion 1----* SubRegion
Flexform:
<settings.flexform.mainRegion>
<TCEforms>
<label>Revier:</label>
<onChange>reload</onChange>
<config>
<type>select</type>
<items type="array">
<numIndex index="0" type="array">
<numIndex index="0">Alle Reviere</numIndex>
<numIndex index="1">0</numIndex>
</numIndex>
</items>
<foreign_table>tx_sccruiseplan_domain_model_mainregion</foreign_table>
<foreign_table_where>ORDER BY main_region_name</foreign_table_where>
<minitems>0</minitems>
<maxitems>1</maxitems>
</config>
</TCEforms>
</settings.flexform.mainRegion>
<subRegionSelector>
<TCEforms>
<label>Gebiet / Region:</label>
<displayCond>FIELD:settings.flexform.mainRegion:REQ:true</displayCond>
<config>
<type>select</type>
<items type="array">
<numIndex index="0" type="array">
<numIndex index="0">Alle Regionen</numIndex>
<numIndex index="1">0</numIndex>
</numIndex>
</items>
<foreign_table_where>AND (main_region_assignment = 2) ORDER BY sub_region_name</foreign_table_where>
<minitems>0</minitems>
<maxitems>1</maxitems>
</config>
</TCEforms>
</subRegionSelector>
Dieser Code funktioniert auch. Natürlich muss sich <foreign_table_where>AND (main_region_assignment = 2</foreign_table_where> dynamisch an den in "MainRegion" ausgewählten Eintrag anpassen. Und hier liegt mein Problem - ist aber auch meine erste Extension!
Ich habe es mit <foreign_table_where>AND (main_region_assignment = FIELD:settings.flexform.mainRegion)</foreign_table_where> versucht, klappt aber leider nicht - schade eigentlich.
Nach viel googlen bin ich jetzt mehr verwirrt als schlauer geworden. Grund: es erschließt sich mir nicht, nach welcher Methode ich nun aus dem flexform auf das Repository zugreifen und die Datensätze filtern kann.
Ich hab's auch damit versucht:
<itemsProcFunc>tx_myextension_Domain_Repository_SubRegionRepository->findInMainRegion()</itemsProcFunc>
class SubRegionRepository extends \TYPO3\CMS\Extbase\Persistence\Repository {
public function findInMainRegion($mainRegion) {
$query = $this->createQuery();
$query->matching(
$query->equals('mainRegionAssignment', 2)
);
return $query->execute();
}
}
?>
Auch dieser Versuch war nicht zielführend, im Select-Feld werden keine Einträge angezeigt, ausgenommen "Alle Regionen". Ich vermute mal, dass man aus der flexform nicht direkt auf eine Methode der Reopsitory-Klasse zugreifen kann. Nur wie dann? Mit einer itemsProcFunc? Nur wo muss ich die anlegen/speichern und wie muss die aussehen? An anderer Stelle habe ich gelesen, dass die Methode im Controller implementiert sein muss. Und danach habe ich gestreikt. Jetzt bin ich total verunsichert und irre umher. Wer kann mich zurück auf den Weg bringen?
Eine Erleuchtung am 1. Advent wäre doch genial, oder? Schon vorab mal ein dickes Dankeschön.
Johannes.