Ergebnis 1 bis 7 von 7

Thema: Eigener Elementtyp, Problem mit Selector (springt nicht zurück auf andere Elemente)

  1. #1
    Contao-Nutzer
    Registriert seit
    15.10.2015.
    Beiträge
    131

    Frage Eigener Elementtyp, Problem mit Selector (springt nicht zurück auf andere Elemente)

    Hallo,

    ich habe ein eigenen Elementtyp erstellt. Mein Slider wird unter den Text Elementen angezeigt.
    Wähle ich diesen aus, erscheint ein Select Feld um den Slider Typ auszuwählen.
    Danach lädt die Seite neu und weitere Felder werden angezeigt.

    Klappt soweit alles, wenn ich nun mein eigenen Element-Typ gegen den Standard Text Typ ändern möchte, bleiben meine Sliderfelder enthalten.

    dca/tl_content.php:

    PHP-Code:
    $GLOBALS['TL_DCA']['tl_content']['palettes']['mm_slider'] = '{type_legend},type;{Slider},mm_slider_typ;{expert_legend:hide},invisible,cssID,space';
    $GLOBALS['TL_DCA']['tl_content']['palettes']['__selector__'][] = 'mm_slider_typ';

    $GLOBALS['TL_DCA']['tl_content']['palettes']['mm_slider_fullsize_bilder'] = '{type_legend},type;{Slider},mm_slider_typ,mm_slider_multi;{expert_legend:hide},invisible,cssID,space';
    $GLOBALS['TL_DCA']['tl_content']['palettes']['mm_slider_content'] = '{type_legend},type;{Slider},mm_slider_typ,mm_slider_text;{expert_legend:hide},invisible,cssID,space';

    $GLOBALS['TL_DCA']['tl_content']['fields']['mm_slider_typ'] = array
    (
        
    'label'     => array('Slider - Typ',''),
        
    'exclude'                 => true,
        
    'inputType'               => 'select',
        
    'options'   => array(
            
    'mm_slider_fullsize_bilder' => 'Fullsize Bilder',
            
    'mm_slider_content' => '1 Bild, Top+Headline, Text'
        
    ),
        
    'eval' => array(
            
    'submitOnChange'=>true,
            
    'mandatory'          => true,
            
    'includeBlankOption' => true,
            
    'tl_class'           => 'w50',
        ),
        
    'sql'                     => "varchar(255) NOT NULL default ''"
    ); 
    Bin für einen Tipp dankbar.

  2. #2
    Contao-Nutzer
    Registriert seit
    15.10.2015.
    Beiträge
    131

    Standard

    Kann mir niemand sagen, wo mein Denkfehler ist?
    Aktuell muss ich das Element immer löschen und ein neues anlegen, sobald man keinen Slider braucht und ein normales Text Element möchte.

    Derjenige der mir erfolgreich hilft, bekommt als Dank 5€ per PayPal :-D

  3. #3
    Contao-Urgestein
    Registriert seit
    29.10.2009.
    Ort
    Magdeburg
    Beiträge
    2.020
    Partner-ID
    626
    User beschenken
    Wunschliste

    Standard

    Das scheint ein Fehler von Contao zu sein, den du allerdings vermeiden kannst.

    Was hier passiert:
    1. Du hast das Feld mm_slider_type als Selector definiert
    2. Wird dieser Wert ausgefüllt, triggered er einen Selektor
    3. Gehst du zurück auf ein anderes Feld, existiert dieser Wert weiterhin in der DB, führt dadurch dazu, dass die Paletten ausgewählt werden


    Definiere die Felder nicht als Palette, sondern als Subpalette, die abhängig vom Slider-Typ angezeigt werden sollen. Schau dir dazu an, wie Contao in tl_content addImage behandelt.

    Derjenige der mir erfolgreich hilft, bekommt als Dank 5€ per PayPal :-D
    Danke, spende Sie einfach einer Hilfsorganisation deiner Wahl.

  4. #4
    Contao-Nutzer
    Registriert seit
    15.10.2015.
    Beiträge
    131

    Standard

    Hm, bei den Standard Typen klappt es ja auch.

    Per Select tut sich nichts:

    Code:
    $GLOBALS['TL_DCA']['tl_content']['palettes']['__selector__'][] = 'mm_slider_test';
    $GLOBALS['TL_DCA']['tl_content']['palettes']['mm_slider'] = '{type_legend},type;{Slider},mm_slider_test;';
    
    $GLOBALS['TL_DCA']['tl_content']['subpalettes']['mm_slider_test_1'] = 'mm_inputtype';
    $GLOBALS['TL_DCA']['tl_content']['subpalettes']['mm_slider_test_2'] = '{test};';
    
    $GLOBALS['TL_DCA']['tl_content']['fields']['mm_slider_test'] = array
    (
        'label'                   => array("Slider Test",""),
        'inputType'               => 'select',
        'options'                 => array('mm_slider_test_1', 'mm_slider_test_2'),
        'eval'                    => array('submitOnChange'=>true),
        'sql'                     => "varchar(255) NOT NULL default ''"
    );
    Habe im Netz leider nicht viel gefunden und mich nach https://de.contaowiki.org/C3:_Tutori...n_der_Paletten gerichtet.

    Per Checkbox funktioniert es zwar.. reicht aber nicht aus.
    Dazu lädt er dann nicht die CSS Datei, die in dem neuen Bereich gebraucht wird (eigener Input Type). Klicke ich auf speichern und lade die gesamte Seite neu, dann wird auch die CSS Datei korrekt mitgeladen.

    Code:
        public function generate()
        {
    
            if (TL_MODE == 'BE'){
                $GLOBALS['TL_CSS']['mm_inputtype'] = 'media/contao/mm_inputtype_be.css';
            }
    }

  5. #5
    Contao-Urgestein
    Registriert seit
    29.10.2009.
    Ort
    Magdeburg
    Beiträge
    2.020
    Partner-ID
    626
    User beschenken
    Wunschliste

    Standard

    Ah, ja. Das du da ein zusätzliches Select hast, hatte ich nicht bedacht. Falls für dich der Einsatz einer zusätzlichen Erweiterung in Frage kommt. MetaPalettes bietet dafür extra eine Lösung: https://de.contaowiki.org/MetaPalett...ten_definieren

  6. #6
    Contao-Urgestein
    Registriert seit
    29.10.2009.
    Ort
    Magdeburg
    Beiträge
    2.020
    Partner-ID
    626
    User beschenken
    Wunschliste

    Standard

    Eine weitere Alterantive: Du leerst den Wert von mm_slider_typ mit dem onsubmit-Callback, wenn der Typ nicht dein Slider ist und behältst die Paletten wie ursprünglich definiert.

  7. #7
    Contao-Nutzer
    Registriert seit
    15.10.2015.
    Beiträge
    131

    Standard

    Vorerst habe ich das Pflichtfeld des Typs deaktiviert, wählt man wieder den blanken Eintrag vorher aus, kann man anschließend den Haupttyp ändern, für Kunden natürlich keine Lösung.

    Aber das mit dem Callback bekomme ich nicht hin.
    Bei normalen Modulen usw hatte ich nie solche Probleme, aber da es unter tl_content ist, möchte es nicht so wie ich:

    Code:
    $GLOBALS['TL_DCA']['tl_content']['config']['onsubmit_callback'][] = array('MyClass', 'myOnsubmitCallback');
    
    class MyClass extends tl_content
    {
        public function myOnsubmitCallback($dc){
            throw new Exception('Fehler');
            echo "ERROR";
            exit;
        }
    }
    myOnsubmitCallback wird jedoch nicht ausgeführt.
    Ob ich "extends tl_content" oder "extends backend" eintrage macht keinen Unterschied.

    Wo ist mein Denkfehler?

    Ps. Ich versuche mittlerweile möglichst ohne Fremd-Erweiterungen zurecht zu kommen, das machte in den letzten Jahren zu häufig Probleme (bei neuen Contao Versionen), das ich alles versuche nachzubauen.
    Geändert von kalterwind (08.10.2018 um 09:49 Uhr)

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •