Wert in itemsProcFunc auslesen (Select Land > Bundesland Abhängigkeit)

  • 0 x
    18 Beiträge
    0 Hilfreiche Beiträge
    17. 04. 2013, 16:58

    Hey zusammen,

    irgendwann trifft man ja immer mal auf eine Ecke in TYPO3, in der man vorher noch nie war: In der TCA meiner Extension habe ich ein Selectfeld "Nation" und ein Selectfeld "Bundesland". Das Selectfeld Bundesland soll nun aufgrund der Auswahl in Nation alle entsprechenden Bundesländer zurückgeben.

    Daher meine Frage: Wie kann ich in meiner itemsProcFunc auf den Wert des vorherigen Selectfelds (nation) zugreifen? Achja: Nachdem im Select eine "Nation" ausgewählt wurde, findet ein "requestUpdate" statt.
    (Der Marker ###REC_FIELD_nation### kommt leider nicht in der itemsProcFunc an, schon probiert).

    Ich bin für jeden Tipp dankbar, hänge nun schon seit ein paar Tagen an diesem Thema :/

    [b]TCA.php[/b]

    1. 'nation' => Array (
    2. 'exclude' => 1,
    3. 'label' => 'LLL:EXT:mm_jobs/locallang_db.xml:tx_mmjobs_content.nation',
    4. 'displayCond' => 'EXT:static_info_tables:LOADED:true',
    5. 'config' => Array (
    6. 'type' => 'select',
    7. 'items' => Array (Array('',0),
    8. ),
    9. 'foreign_table' => 'static_countries',
    10. 'foreign_table_where' => 'AND static_countries.pid=0 ORDER BY static_countries.cn_short_en',
    11. 'size' => 1,
    12. 'minitems' => 0,
    13. 'maxitems' => 1,
    14. )
    15. ),
    16.  
    17. 'bundesland' => Array (
    18. 'exclude' => 1,
    19. 'label' => 'LLL:EXT:mm_jobs/locallang_db.xml:tx_mmjobs_content.bundesland',
    20. 'displayCond' => 'EXT:static_info_tables:LOADED:true',
    21. 'config' => Array (
    22. 'type' => 'select',
    23. 'items' => Array (
    24. Array('',0),
    25. ),
    26. 'itemsProcFunc' => 'tx_mmjobs_func->get_available_countries',
    27. 'size' => 1,
    28. 'minitems' => 0,
    29. 'maxitems' => 1,
    30. )
    31. ),

    [b]class.tx_mmjobs_func.php[/b]

    1. class tx_mmjobs_func {
    2.  
    3. function get_available_countries(&$params,&$pObj) {
    4.  
    5. $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('zn_name_local','static_country_zones','zn_country_iso_nr = ###HIER BENÖTIGE ICH DEN WERT AUS FELD NATION###');
    6.  
    7. while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
    8. $countries[] = $row;
    9. }
    10.  
    11. sort($countries);
    12.  
    13. foreach ($countries as $cell => $value) {
    14. $params['items'][] = array($value['zn_name_local']);
    15. }
    16. }
    17. }


  • 1
  • LuP LuP
    Jedi-Meister
    0 x
    496 Beiträge
    1 Hilfreiche Beiträge
    18. 04. 2013, 09:14

    Hallo,

    Du kannst eine WHERE-Kausel im Konfigurationsparameter der itemsProcFunc angeben.

    1. 'where' => 'static_countries.uid=###REC_FIELD_country###',

    Dann in der get_available_countries(), die vielleicht get_available_zones() heißen müsste, den übergebenen Marker parsen. Siehe hiezu die Funktion replaceMarkersInSQL() der Klasse tx_staticinfotables_div.

    Der Rest besteht dann nur noch in der Formulierung Deiner SQL-Abfrage.

    VG,
    LuP

  • jochla jochla
    R2-D2
    0 x
    125 Beiträge
    0 Hilfreiche Beiträge
    22. 11. 2013, 12:18

    Ich finde es immer wieder erstaunlich, wenn auf Lösungshilfen vom Fragenden keine Reaktion mehr erfolgt, ob es im nun geholfen hat und ob der Lösungsvorschlag so funktioniert hat. Eine knappe kurze Antwort würde allen anderen die den Thread später lesen viel helfen. Ganz abgesehen davon, dass es meiner Meinung nach einfach zum guten Ton gehört, sich bei dem, der einem mit einer Antwort auf seine Frage weitergeholfen hat (und somit Zeit für ihn aufgewendet hat) sich auch zu bedanken.

    Ich habe nämlich das gleiche Problem, nur anstatt Nation / Bundesland ist es bei mir Revier / Segelgebiet. Und ich weiß nun nicht, ob dieser Lösungsweg zum Ziel geführt hat. Unabhängig davon interessiert mich, ob es hier auch eine "Extbase-Variante" gibt, und wie es mit Extbase und Flexforms zu lösen ist.

    1. <mainRegionSelector>
    2. <TCEforms>
    3. <label>Revier:</label>
    4. <config>
    5. <type>select</type>
    6. <items type="array">
    7. <numIndex index="0" type="array">
    8. <numIndex index="0">Alle Reviere</numIndex>
    9. <numIndex index="1">0</numIndex>
    10. </numIndex>
    11. </items>
    12. <foreign_table>tx_extension_domain_model_mainregion</foreign_table>
    13. <foreign_table_where>ORDER BY main_region_name</foreign_table_where>
    14. <minitems>0</minitems>
    15. <maxitems>1</maxitems>
    16. </config>
    17. </TCEforms>
    18. </mainRegionSelector>
    19. <subRegionSelector>
    20. <TCEforms>
    21. <label>Segelgebiet:</label>
    22. <config>
    23. <type>select</type>
    24. <items type="array">
    25. <numIndex index="0" type="array">
    26. <numIndex index="0">Alle Segelgebiete</numIndex>
    27. <numIndex index="1">0</numIndex>
    28. </numIndex>
    29. </items>
    30. <foreign_table>tx_extension_domain_model_subregion</foreign_table>
    31. <foreign_table_where>ORDER BY sub_region_name</foreign_table_where>
    32. <minitems>0</minitems>
    33. <maxitems>1</maxitems>
    34. </config>
    35. </TCEforms>
    36. </subRegionSelector>

    Über den Extension Builder ist im Domain Model eine 1:n-Relation zwischen tx_extension_domain_model_mainregion (Aggregate Root) und tx_extension_domain_model_subregion angelegt. Im Backend werden im Plugin-Flexform die Select-Felder mit den entsprechenden Werten aus den Tabellen angezeigt.

    Nun möchte ich, dass wenn das Revier geändert wird, im Select-Feld "Segelgebiete" nur noch die Segelgebiete angezeigt werden, die dem ausgewählten Revier entsprechen. Praktisch ist das ein DB-Select mit WEHRE mainRegion="<ID ausgewähltes Revier>". Nur hab ich keine Ahnung wie ich die ID des ausgewählten Reviers in das <foreign_table_where> für die Segelgebiete (tx_extension_domain_model_subregion) bekomme. Wer kann mir hier weiterhelfen?

    Bei Recherchieren ist mir das Tag <onChange>reload</onChange> aufgefallen. Leider habe ich kein Beispiel für mein Problem gefunden.

    Gruß, Johannes.

  • schumiel schumiel
    R2-D2
    0 x
    85 Beiträge
    0 Hilfreiche Beiträge
    31. 08. 2018, 11:49

    Ich stehe vor dem gleichen Problem und habe es ähnlich aufgebaut, wie der Threadersteller. Nur das ich das mit einem "'onChange' => 'reload'," durchführe.

    Jedoch kann ich mit der Antwort von LuP nichts anfangen. Kann das jemand übersetzen für Anfänger wie mich?

  • 1