Ergebnis 1 bis 3 von 3

Thema: Subpalette anzeigen, wenn Select keinen Wert enthält

  1. #1
    Contao-Nutzer Avatar von chatjack
    Registriert seit
    02.09.2012.
    Ort
    Essen
    Beiträge
    137

    Standard Subpalette anzeigen, wenn Select keinen Wert enthält

    Moin zusammen,

    ich bin gerade etwas am verzweifeln. Ich versuche eine Subpalette auszugeben, wenn in einem Select kein Wert ausgewählt wurde.

    Das Select-Feld holt sich seine Daten aus einer anderen Tabelle.

    Code:
            'home' => [
                'inputType'              => 'select',
                'foreignKey'             => 'tl_gs_home.name',
                'eval'                   => [
                    'submitOnChange'     => true,
                    'includeBlankOption' => true,
                    'tl_class'           => 'w50'
                ],
                'sql'                    => "int(10) unsigned NOT NULL default '0'",
            ],
    1.png

    Per 'foreignKey' werden Werte aus einer anderen Tabelle gezogen. Zusätzlich wird über 'includeBlankOption' die Option '-' hinzugefügt.

    Nun würde ich gerne zusätzliche Felder einblenden, wenn die Option '-' ausgewählt wurde.

    2.png

    In der Contao-Dokumentation steht dazu, dass man eine Subpallette aus "{feldname}_{feldwert}" erstellen kann. https://docs.contao.org/dev/reference/dca/palettes/

    Die über "includeBlankOption" hinzugefügte Option besitzt kein Value. Nach ein paar vardumps in der DC_Table.php stellte sich heraus, dass der Wert für die Subpalette als "0" interpretiert werden würde.

    Dementsprechend müsste der Schlüssel für die Subpalette also 'home_0' sein. Leider kommt hier aber nichts zurück, da die 0 per if statement gefiltert wird.

    https://github.com/contao/contao/blo...able.php#L3292

    Nun habe ich versucht, das Problem über Callbacks zu umschiffen, indem ich beim Laden aus der Datenbank den Wert von "0" in "none" ändere und beim Schreiben in die Datenbank von "none" wieder in "0", sodass ich den Schlüssel für die Subpalette einfach "home_none" nennen kann. Das Problem ist, dass Callbacks bei den Subpaletten komplett ignoriert werden, da der Wert hier direkt aus der Datenbank gezogen wird.

    https://github.com/contao/contao/blo...hp#L3297-L3299

    Die einzige Idee, die mir bisher gekommen ist, ist eine zusätzliche Dropdown-Liste, über die man zwischen den beiden Varianten hin und her switchen kann. Vielleicht hat ja noch jemand eine Idee, wie man es auch ohne zusätzliche DropDown-Liste hinbekommt.

    Ich hatte zur Lösung des Problems bereits einen Pull Request erstellt. Leider bisher ohne Reaktion.
    https://github.com/contao/contao/pull/5112

  2. #2
    Contao-Nutzer Avatar von chatjack
    Registriert seit
    02.09.2012.
    Ort
    Essen
    Beiträge
    137

    Standard

    Die Lösung ist, komplett auf Subpaletten zu verzichten und die Felder per "config.onload" callback aus der Default-Palette zu entfernen, wenn ein Wert unter home ausgewählt wurde.

    Code:
    <?php
    
    namespace App\EventListener\DataContainer;
    
    use App\Model\GsClientModel;
    use Contao\CoreBundle\ServiceAnnotation\Callback;
    use Contao\DataContainer;
    use Symfony\Component\HttpFoundation\RequestStack;
    
    /**
     * @Callback(table="tl_gs_client", target="config.onload")
     */
    class HomeSubpalette
    {
        private $requestStack;
    
        public function __construct(RequestStack $requestStack)
        {
            $this->requestStack = $requestStack;
        }
    
        public function __invoke(DataContainer $dc = null): void
        {
            if (null === $dc || !$dc->id || 'edit' !== $this->requestStack->getCurrentRequest()->query->get('act')) {
                return;
            }
    
            $element = GsClientModel::findById($dc->id);
    
            if ($element->home) {
                $GLOBALS['TL_DCA']['tl_gs_client']['palettes']['default'] = str_replace(
                    [',zipcode',',city',',street',',housenumber'],
                    '',
                    $GLOBALS['TL_DCA']['tl_gs_client']['palettes']['default']
                );
            }
    
        }
    }

  3. #3
    Contao-Nutzer Avatar von chatjack
    Registriert seit
    02.09.2012.
    Ort
    Essen
    Beiträge
    137

    Standard

    Seit Contao 4.9.33 bzw. 4.13.7 wird nun auch das Suffix "_0" für Subpaletten unterstützt.

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
  •