Custom Elements - options_callback nicht möglich?

Stefan's Avatar

Stefan

10 Mar, 2014 06:36 PM

Hallo RockSolid-Team,

zu meiner Verwunderung musste ich heute morgen feststellen, dass es mittels Custom Elements anscheinend nicht möglich ist, die Optionen eines Select-Elements mittels options_callback zu füttern. In meinem speziellen Fall wollte ich in ein Modal-Fenster, welches ich mittels Custom Elements gebaut hatte, mit einem Kontaktformular ausstatten. Ein Select-Element, das über options_callback => array('tl_content','getForms') befüllt wird, schien mir da die erste Wahl zu sein, führte aber leider zu einem Fehler, anstatt einer Liste kam NULL zurück. Die einzige Möglichkeit die mir nun blieb war, die Formular-ID manuell in ein Textfeld einzugeben, was aus Benutzersicht doch ziemlich umständlich ist. Gibt es derzeit Pläne, einige der wichtigsten Standard-Callbacks für die Custom Elements nutzbar zu machen?

Beste Grüße,
Stefan

  1. Support Staff 1 Posted by RockSolid Theme... on 11 Mar, 2014 08:06 AM

    RockSolid Themes's Avatar

    Vielen Dank für Ihre Frage.

    Alle Contao-Callbacks für Felder werden unterstützt. Folgende Feld-Konfigurationen funktionieren einwandfrei:

    'feld1' => array(
        'label' => array('Feld 1', ''),
        'inputType' => 'select',
        'options_callback' => function() {
            return array('wert1' => 'Bezeichnung 1', 'wert2' => 'Bezeichnung 2');
        },
    ),
    'feld2' => array(
        'label' => array('Feld 2', ''),
        'inputType' => 'select',
        'options_callback' => array('tl_content', 'getForms'),
    ),
    

    Eventuell haben Sie versucht den Callback array('tl_content', 'getForms') in einem Modul zu verwenden, was auch mit Contao DCA's nicht möglich ist. Für Module können Sie array('tl_module', 'getForms') verwenden.

  2. 2 Posted by Stefan on 11 Mar, 2014 08:21 AM

    Stefan's Avatar

    Vielen Dank für die schnelle Antwort,

    ich hatte es gestern sowohl mit array('tl_content', 'getForms') als auch array('tl_module', 'getForms') versucht. Allerdings vermute ich, dass der Fehler bei der Verwendung von array('tl_module', 'getForms') eher auf Caching, nicht korrekt gespeicherte Änderungen oder einen Tippfehler zurück ging, denn als ich es soeben noch einmal damit probiert hatte, funktionierte es. Vielen Dank also nochmal, ohne diesen Tipp hätte ich es wohl nicht ein zweites Mal versucht.

    Beste Grüße,
    Stefan

  3. 3 Posted by Christian Romen... on 22 Jan, 2015 08:52 PM

    Christian Romeni's Avatar

    Ist es auch möglich eigene CallBacks zu schreiben?
    Ich wüsste jetzt nicht an welcher Stelle ich das machen soll...

    Grüße - Christian Romeni

  4. Support Staff 4 Posted by RockSolid Theme... on 23 Jan, 2015 09:01 AM

    RockSolid Themes's Avatar

    Ja, eigene Callbacks sind auch möglich. Beispiel:

    'feld' => array(
        'label' => array('Feld', ''),
        'inputType' => 'select',
        'options_callback' => function() {
            return array('wert1' => 'Bezeichnung 1', 'wert2' => 'Bezeichnung 2');
        },
    ),
    
  5. 5 Posted by boony on 20 May, 2015 11:01 PM

    boony's Avatar

    Hallo! Ich habe das beschriebene Verhalten auch gerade bemerkt. Der options_callback funktioniert nur für Elemente, die nicht in einer Liste verschachtelt sind. Für Elemente innerhalb einer Liste funktioniert auch die statische Belegung per 'options' => array('foo','bar') nicht.

  6. 6 Posted by boony on 20 May, 2015 11:31 PM

    boony's Avatar

    Ich nehme alles zurück, zumindest statisch funktioniert's doch.

  7. 7 Posted by Jacob Fricke on 06 Jan, 2017 11:40 AM

    Jacob Fricke's Avatar

    Ist es möglich innerhalb des Callback auf die Werte des Elements zuzugreifen?

  8. 8 Posted by Jacob Fricke on 06 Jan, 2017 11:44 AM

    Jacob Fricke's Avatar

    Ja ist es, erst informieren, dann meckern. Für alle die sich die selbe Frage stellen:

    'fields' => array(
     'category' => array(/* ..... */ ),
     'question' => array(
      'options_callback' => function($dc){
        $archiveId = $dc->activeRecord->rsce_field_category ;
    /* ... */
    
  9. 9 Posted by Christian Dilge... on 15 May, 2017 09:22 AM

    Christian Dilger's Avatar

    Hmm,

    wie kann ich aber innerhalb einer Liste auf den DC-Wert des aktuellen Listitems zugreifen? Versuche gerade zwei Selects voneinander abhängig zu machen, d. h. im zweiten Listitem wähle ich select="typ1" und habe dann einen options_callback, der nach submitOnChange dann ein zweites Select innerhalb dieses zweiten Listitems in Abhängigkeit vom nun gewählten "typ1" füllen soll. Leider finde ich nur dataKey im Src-Code der Erweiterung, mir fehlt aber eine schlaue Idee, wie das im Backend für den callback ermitteln könnte.

    Viele Grüße

    Christian

  10. Support Staff 10 Posted by RockSolid Theme... on 15 May, 2017 01:22 PM

    RockSolid Themes's Avatar

    Vielen Dank für Ihre Frage.

    Der Code dafür könnte z. B. folgendermaßen aussehen:

    'selects' => array(
        'inputType' => 'list',
        'fields' => array(
            'select1' => array(
                //...
            ),
            'select2' => array(
                //...
                'options_callback' => function($dc) {
                    if (preg_match('/__(\d+)__/', $dc->field, $matches)) {
                        $select1 = $dc->activeRecord->{'rsce_field_selects__'.$matches[1].'__select1'};
                        return [
                            //...
                        ];
                    }
                },
            ),
        ),
    ),
    

Reply to this discussion

Internal reply

Formatting help / Preview (switch to plain text) No formatting (switch to Markdown)

Attaching KB article:

»

Attached Files

You can attach files up to 10MB

If you don't have an account yet, we need to confirm you're human and not a machine trying to post spam.

Keyboard shortcuts

Generic

? Show this help
ESC Blurs the current field

Comment Form

r Focus the comment reply box
^ + ↩ Submit the comment

You can use Command ⌘ instead of Control ^ on Mac