Ergebnis 1 bis 21 von 21

Thema: tl_content Feld hinzufügen via DCA u. Palette Manipulator

  1. #1
    Contao-Urgestein Avatar von Franko
    Registriert seit
    22.06.2009.
    Beiträge
    1.503
    Partner-ID
    6122

    Standard tl_content Feld hinzufügen via DCA u. Palette Manipulator

    Hallo,
    ich versuche ein neues Feld zu erstellen über die Datei "contao/dca/tl_content.php":

    PHP-Code:
    <?php

    // contao/dca/tl_content.php

    use Contao\CoreBundle\DataContainer\PaletteManipulator;

    /*
    foreach ($GLOBALS['TL_DCA']['tl_content']['palettes'] as $k => $palette)
    {
        if (!is_array($palette) && strpos($palette, "cssID") !== false)
        {
            $GLOBALS['TL_DCA']['tl_content']['palettes'][$k] = str_replace
            (
                '{expert_legend',
                '{Meine Legende}, yDataAttributes;{expert_legend',
                $GLOBALS['TL_DCA']['tl_content']['palettes'][$k]
            );
        }
    }
    */

    $GLOBALS['TL_DCA']['tl_content']['fields']['yDataAttributes'] = [
        
    'label'        => ['Data-Attribut''Hier können Sie Data-Attribute vergeben.'],
        
    'inputType' => 'text',
        
    'eval' => ['tl_class' => 'w50''maxlength' => 255],
        
    'sql' => ['type' => 'string''length' => 255'default' => ''],
    ];


    PaletteManipulator::create()
        
    // add a new "custom_legend" before the "expert_legend"
        
    ->addLegend('Meine Legende Demo''expert_legend'PaletteManipulator::POSITION_BEFORE)

        
    // directly add new fields to the new legend
        
    ->addField('yDataAttributes''Meine Legende Demo'PaletteManipulator::POSITION_APPEND)
        
        
    // then apply it to the palette as usual
        
    ->applyToPalette('default''tl_content')
    ;

    ?>
    Soweit funktioniert es wenn ich eine neue Legende über die foreach Schleife hinzufüge (o. auskommentiert).

    Beim Versuch dies über den Palette Manipulator zu realisieren wird mir im Backend dann aber nichts angezeigt?
    Für Hilfe dankbar.
    Franko
    Freelancer, Digital Design Enthusiast, Contao Aficionado and Tutorial Junkie @MoinFranko - Carpe diem ...

  2. #2
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.063
    Partner-ID
    10107

    Standard

    ?> solltest du löschen.

    Bei deiner Verwendung mit dem PaletteManipulator fügst du das Feld nur in die default Palette hinzu - die default Palette wird aber von keinem Inhaltselement benutzt. Du musst entweder das Feld in die richtige Palette hinzufügen - oder in allen Paletten, bspw. automatisiert über eine Schleife, wie du es schon gemacht hast.

  3. #3
    Contao-Urgestein Avatar von Franko
    Registriert seit
    22.06.2009.
    Beiträge
    1.503
    Partner-ID
    6122

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    ?> solltest du löschen.

    Bei deiner Verwendung mit dem PaletteManipulator fügst du das Feld nur in die default Palette hinzu - die default Palette wird aber von keinem Inhaltselement benutzt. Du musst entweder das Feld in die richtige Palette hinzufügen - oder in allen Paletten, bspw. automatisiert über eine Schleife, wie du es schon gemacht hast.
    Hi,
    also wäre der Weg über die foreach Schleife in diesem Fall korrekt - Oder gibt es dann hierzu auch eine Lösung beim Einsatz des Palette Manipulators?
    Freelancer, Digital Design Enthusiast, Contao Aficionado and Tutorial Junkie @MoinFranko - Carpe diem ...

  4. #4
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.063
    Partner-ID
    10107

    Standard

    Ja, das meinte ich ja: wenn du es für alle Paletten machen willst, machst du eine Schleife über alle Paletten und benutzt dann innerhalb der Schleife den PaletteManipulator (dabei gibt es verschiedene Varianten: du könntest eine Instanz außerhalb erzeugen und dann innerhalb nur mehr applyToPalette ausführen, oder innerhalb der Schleife jedesmal eine neue Instanz erzeugen - spielt aber im Endeffekt keine Rolle).

  5. #5
    Contao-Urgestein Avatar von Franko
    Registriert seit
    22.06.2009.
    Beiträge
    1.503
    Partner-ID
    6122

    Standard

    Hi,
    könntest du mir bitte hierzu ein Code Beispiel geben - also zusammen mit dem Manipulator ...?
    Würde das dann gerne in der Doku hinsichtlich https://github.com/contao/docs/issues/576 aufnehmen
    Lieben Dank
    Freelancer, Digital Design Enthusiast, Contao Aficionado and Tutorial Junkie @MoinFranko - Carpe diem ...

  6. #6
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.063
    Partner-ID
    10107

    Standard

    PHP-Code:
    use Contao\CoreBundle\DataContainer\PaletteManipulator;

    foreach (
    $GLOBALS['TL_DCA']['tl_content']['palettes'] as $name => $palette) {
        if (!\
    is_string($palette)) {
            continue;
        }

        
    PaletteManipulator::create()
            
    // add a new "custom_legend" before the "expert_legend"
            
    ->addLegend('Meine Legende Demo''expert_legend'PaletteManipulator::POSITION_BEFORE)

            
    // directly add new fields to the new legend
            
    ->addField('yDataAttributes''Meine Legende Demo'PaletteManipulator::POSITION_APPEND)

            
    // then apply it to the palette as usual
            
    ->applyToPalette($name'tl_content')
        ;


  7. #7
    Contao-Urgestein Avatar von Franko
    Registriert seit
    22.06.2009.
    Beiträge
    1.503
    Partner-ID
    6122

    Standard

    Perfekt!
    Danke
    Freelancer, Digital Design Enthusiast, Contao Aficionado and Tutorial Junkie @MoinFranko - Carpe diem ...

  8. #8
    Contao-Urgestein Avatar von Franko
    Registriert seit
    22.06.2009.
    Beiträge
    1.503
    Partner-ID
    6122

    Standard

    Sorry, ich schon wieder.
    Habe das Feld jetzt als "keyValueWizard" angelegt:

    PHP-Code:
    <?php
    // contao/dca/tl_content.php

    use Contao\CoreBundle\DataContainer\PaletteManipulator;

    $GLOBALS['TL_DCA']['tl_content']['fields']['myCustomDataAttributes'] = [
        
    'label'            => ['Data-Attribut''Hier können Sie Data-Attribute vergeben.'],
        
    'inputType'     => 'keyValueWizard',
        
    'eval'         => ['tl_class' => 'w50'],
        
    'exclude'        => true,
        
    'sql'         => "text NULL",
    ];

    foreach (
    $GLOBALS['TL_DCA']['tl_content']['palettes'] as $name => $palette) {
        if (!\
    is_string($palette)) {
            continue;
        }

        
    PaletteManipulator::create()
            
    // add a new Legend before the "expert_legend"
            
    ->addLegend('Einstellungen Data-Attribute''expert_legend'PaletteManipulator::POSITION_AFTER)

            
    // directly add new field(s)s to the new legend
            
    ->addField('myCustomDataAttributes''Einstellungen Data-Attribute'PaletteManipulator::POSITION_APPEND)

            
    // then apply it to the palette as usual
            
    ->applyToPalette($name'tl_content')
        ;
    }
    Wie kann ich die Eingaben jetzt im Template "block_searchable.html5" zur Anzeige bringen?

    Bekomme mit:
    PHP-Code:
    <?php if ($this->myCustomDataAttributes): ?> <?= $this->myCustomDataAttributes ?><?php endif; ?>
    jetzt z.B.:
    HTML-Code:
    <div class="ce_text block" a:2:{i:0;a:2:{s:3:"key";s:8:"dat_demo";s:5:"value";s:1:"1";}i:1;a:2:{s:3:"key";s:9:"dat_demo2";s:5:"value";s:1:"2";}}="">
    ..
    </div>
    Freelancer, Digital Design Enthusiast, Contao Aficionado and Tutorial Junkie @MoinFranko - Carpe diem ...

  9. #9
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.063
    Partner-ID
    10107

    Standard

    Das sind serialisierte Daten. Die musst du bspw. mit StringUtil::deserialize deserialisieren.

  10. #10
    Contao-Urgestein Avatar von Franko
    Registriert seit
    22.06.2009.
    Beiträge
    1.503
    Partner-ID
    6122

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Das sind serialisierte Daten. Die musst du bspw. mit StringUtil::deserialize deserialisieren.
    Danke,
    habe jetzt die Ausgabe des Feldes im Template "block_searchable.html5" für die Inhaltselemente realisieren können.

    Wozu bzw. wann wird das Template "block_unsearchable.html5" eigentlich benötigt?
    Sollte man das in diesem Fall dann auch immer entsprechend ändern?
    Freelancer, Digital Design Enthusiast, Contao Aficionado and Tutorial Junkie @MoinFranko - Carpe diem ...

  11. #11
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.063
    Partner-ID
    10107

    Standard

    Von diesem Template erben andere Templates. Durchsuche die Contao Installation danach, dann siehst du, welche Templates davon erben.

  12. #12
    Contao-Urgestein Avatar von Franko
    Registriert seit
    22.06.2009.
    Beiträge
    1.503
    Partner-ID
    6122

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Von diesem Template erben andere Templates. Durchsuche die Contao Installation danach, dann siehst du, welche Templates davon erben.
    Fix wie immer :-)
    Wäre demnach, nach einer DCA Manipulation von tl_content optimal beide Template Dateien sicherheitshalber entsprechend zu ergänzen.
    Dank
    Freelancer, Digital Design Enthusiast, Contao Aficionado and Tutorial Junkie @MoinFranko - Carpe diem ...

  13. #13
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.063
    Partner-ID
    10107

    Standard

    Das eine hat grundsätzlich nichts mit dem anderen zu tun, bzw. kommt einfach auf deinen use-case an, daher kann ich das nicht beantworten . Beschreibe mal dein Ziel genauer.

    Falls dein Ziel ist, das per DCA hinzugefügte Feld von tl_content, bei jedem Inhaltselement als Attribut im Frontend ausgeben zu lassen, dann wird es komplizierter. Eine Anpassung von block_searchable oder block_unsearchable reicht da nicht, weil nicht jedes Inhaltselement davon erbt. Mögliche allgemeine Ansätze für so ein Vorhaben siehst du bspw. in https://github.com/onemarshall/contao-aos oder https://github.com/inspiredminds/contao-wowjs

    Ist nicht sehr trivial.

    Passend dazu ist auch folgender PR relevant: https://github.com/contao/contao/pull/2292

  14. #14
    Contao-Urgestein Avatar von Franko
    Registriert seit
    22.06.2009.
    Beiträge
    1.503
    Partner-ID
    6122

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Falls dein Ziel ist, das per DCA hinzugefügte Feld von tl_content, bei jedem Inhaltselement als Attribut im Frontend ausgeben zu lassen, dann wird es komplizierter. Eine Anpassung von block_searchable oder block_unsearchable reicht da nicht, weil nicht jedes Inhaltselement davon erbt.
    Genau so hatte ich es naiv gedacht.
    Es gibt demnach kein (ulimatives) Template welches nativ in allen Inhaltselementen herangezogen wird?
    So - wie muss ich dann vorgehen?

    Wie ich es mit obiger Variante schnell getestet habe, wird das neue, custom Feld im Backend bei den verschiedenen Inhaltselementen bereit gestellt/angezeigt.
    Via Ergänzung von Template "block_searchable" oder "block_unsearchable" ist die frontend Ausgabe aber dann keine Garantie. Gegebenenfalls dann manuell das entsprechende Template für ein spezifisches Inhaltselement anpassen.

    Weiß dann nur nicht wie man diesen Umstand in der Doku beschreiben könnte ...
    Freelancer, Digital Design Enthusiast, Contao Aficionado and Tutorial Junkie @MoinFranko - Carpe diem ...

  15. #15
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.063
    Partner-ID
    10107

    Standard

    Zitat Zitat von Franko Beitrag anzeigen
    So - wie muss ich dann vorgehen?
    Mögliche Lösungswege habe ich in meinem Post bereits beschrieben

    - - - Aktualisiert - - -

    Zitat Zitat von Franko Beitrag anzeigen
    Weiß dann nur nicht wie man diesen Umstand in der Doku beschreiben könnte ...
    Ich fürchte derzeit gar nicht.

  16. #16
    Contao-Urgestein Avatar von Franko
    Registriert seit
    22.06.2009.
    Beiträge
    1.503
    Partner-ID
    6122

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Ich fürchte derzeit gar nicht.
    Hm, wie komme ich an eine Liste der Templates von Inhaltselementen die auf "block_xyz" basieren/nicht basieren?
    Könnte man dann umschreiben ala:

    Hinweis:
    Die Templates "block_searchable" oder "block_unsearchable" werden nicht von allen Inhaltselementen bzw. in deren Template-Dateien heran gezogen.

    Dies wären z. B. >>Liste hier<<.

    In diesen Fällen mußt du das entsprechend, passende Template direkt mit den jeweiligen Feld-Abfragen erweitern.
    Freelancer, Digital Design Enthusiast, Contao Aficionado and Tutorial Junkie @MoinFranko - Carpe diem ...

  17. #17
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.063
    Partner-ID
    10107

    Standard

    Das löst das grundlegende Problem ja nicht. Was ist bspw. wenn du zusätzliche Extensions installierst, die eigene Inhaltselemente mitbringen, und auch nicht von block_searchable erben? Wie gesagt, wenn du das allgemein lösen möchtest, dann musst du einen Ansatz wie in den erwähnten Extensions verfolgen, derzeit. Im verlinkten Pull Request werden allgemeinere Ansätze diskutiert, aber das ist im derzeitigen Contao System nicht so leicht.

  18. #18
    Contao-Urgestein Avatar von Franko
    Registriert seit
    22.06.2009.
    Beiträge
    1.503
    Partner-ID
    6122

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    , dann musst du einen Ansatz wie in den erwähnten Extensions verfolgen, derzeit. Im verlinkten Pull Request werden allgemeinere Ansätze diskutiert, aber das ist im derzeitigen Contao System nicht so leicht.
    Ok,
    leider verstehe ich diesbezüglich zu wenig von der Materie als das ich die genannten Ansätze durchdringen würde.
    Ich versuch es einfach mal für die Doku aufzunehmen und entsprechende Fallstricke hierbei abzudecken.

    Dennoch:
    Für den zukünftigen Doku Guides/Beitrag
    habe ich mich hinsichtlich der Eingabe von Data-Attributen (ohne Extension via DCA Manipulation)
    an der Erweiterung von Janosch Oltmanns orientiert.

    Hier werden hinsichtlich Templates auch nur die beiden genannten berücksichtigt: https://github.com/JanoschOltmanns/C...emplates/block
    Fällt diese Umsetzung dann ebenso unter den von dir genannten Restriktionen - oder ist das bei Erweiterungen/Bundles grundsätzlich anders?

    Sorry, fürs nerven.
    Lieben Gruß
    Franko
    Freelancer, Digital Design Enthusiast, Contao Aficionado and Tutorial Junkie @MoinFranko - Carpe diem ...

  19. #19
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.063
    Partner-ID
    10107

    Standard

    Ja, die Erweiterung würde bspw. nicht für das "Überschrift" Inhaltselement funktionieren.

  20. #20
    Contao-Urgestein Avatar von Franko
    Registriert seit
    22.06.2009.
    Beiträge
    1.503
    Partner-ID
    6122

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Ja, die Erweiterung würde bspw. nicht für das "Überschrift" Inhaltselement funktionieren.
    Lieben Dank für deine unermüdliche Hilfe und ruhige Response in den Forum/Slack Beiträgen ...
    Freelancer, Digital Design Enthusiast, Contao Aficionado and Tutorial Junkie @MoinFranko - Carpe diem ...

  21. #21
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.063
    Partner-ID
    10107

    Standard

    Kein Problem

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
  •