Ergebnis 1 bis 1 von 1

Thema: data attributes in Twig?

  1. #1
    Contao-Nutzer
    Registriert seit
    03.12.2014.
    Beiträge
    9

    Frage data attributes in Twig?

    Hallo liebe Contao-Gemeinde,

    ich habe in der Vergangenheit (Contao 4) die Erweiterung "contao-data-attributes-bundle" verwendet, um Attribute für Artikel und Inhaltselemente zu generieren.

    Jetzt liegt folgendes Problem vor: Die Erweiterung nutzte Modifikationen an 'block_searchable.html5' und 'block_unsearchable.html5', die quasi das Parent für 'ce_text.html5' waren (nach meinem Wissensstand kann ich 'block_searchable.html5' in Contao 5 nicht weiter verwenden):

    In meinem Fall benötige ich folgenden Code für Contao 5 / Twig-Template:

    PHP-Code:
    <?php if ($this->attributes): ?> <?= $this->attributes ?><?php endif; ?>
    Meinem Verständnis nach sollte ich in Contao 5 nun '_base.html.twig' verwenden, dieses sieht folgendermaßen aus:

    Code:
    {% extends "@Contao/content_element/_base.html.twig" %}
    {% block attributes %}
        {{ parent() }}
        data-test="test"
        {{ data.joDataAttributes|default('')|raw }} 
    {% endblock %}
    Der HTML-Output davon ist:

    HTML-Code:
    <div class="content-text" data-test="test" a:1:{i:0;a:2:{s:3:"key";s:11:"data-celink";s:5:"value";s:3:"500";}}="">
    In einem anderen Topic hab ich folgendes gefunden:

    "Deserialize solltest du wenn dann im Controller machen, nicht im Template. Also erst die deserialisierten Daten an das Template übergeben."

    Leider bin ich nicht so versiert; vielleicht könnte jemand Erste Hilfe leisten.

    PHP-Code:
    <?php

    /*
     * This file is part of the contao data-attributes bundle.
     *
     * Copyright (c) 2017 Janosch Oltmanns
     *
     */

    namespace JanoschOltmanns\ContaoDataAttributesBundle;


    class 
    DataAttributesContentElement {

        private function 
    hasDataAttributes($templateData) {

            return isset(
    $templateData['joDataAttributes']);

        }

        private function 
    hasDisabledAutomatism($templateData) {

            return 
    $templateData['joDataAttributesDisableAutomatic'];

        }

        private function 
    getDataAttributesAsString($templateData) {

            
    $dataAttributesString "";
            
    $dataAttributes = \Contao\StringUtil::deserialize($templateData['joDataAttributes'], true);
            
    $parsedDataAttributes = [];

            if (
    sizeof($dataAttributes)>0) {

                foreach (
    $dataAttributes as $index=>$dataAttribute) {
                    
    $parsedDataAttributes[] = str_replace('data-''data-'$dataAttribute['key']) . '="' $dataAttribute['value'] . '"';
                }
                
    $dataAttributesString implode(' ' $parsedDataAttributes);
            }

            return 
    $dataAttributesString;

        }

        public static function 
    getDataAttributes($templateData) {

            
    $dataAttributes "";
            if (
    self::hasDataAttributes($templateData)) {
                
    $dataAttributes self::getDataAttributesAsString($templateData);
            }

            return 
    $dataAttributes;
        }

        public function 
    parseTemplate($objTemplate) {
            
    $templateData $objTemplate->getData();
        
            if (
    $this->hasDataAttributes($templateData) && !$this->hasDisabledAutomatism($templateData)) {
                
    $dataAttributesString $this->getDataAttributesAsString($templateData);
                if (isset(
    $objTemplate->attributes)) {
                    
    $objTemplate->attributes .= ' ' $dataAttributesString;
                } else {
                    
    $objTemplate->attributes $dataAttributesString;
                }
            }
        }
    }
    Für Anregungen und Vorschläge wäre ich sehr dankbar. Beste Grüße.
    Geändert von zubasa (06.03.2024 um 14:00 Uhr)

Aktive Benutzer

Aktive Benutzer

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

Lesezeichen

Lesezeichen

Berechtigungen

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