Ergebnis 1 bis 5 von 5

Thema: CSS Klasse hinzufügen in Hook getContentElement

  1. #1
    Contao-Nutzer
    Registriert seit
    22.04.2025.
    Beiträge
    4

    Standard CSS Klasse hinzufügen in Hook getContentElement

    Hallo an alle,

    ich hoffe mir kann jemand weiter helfen. Wir haben ein älteres Contao Bundle das es ermöglichte CSS Klassen bei Content Elementen hinzuzufügen. In 4.13 hat das auch noch alles funktioniert, allerdings hat sich beim dem Hook wohl die übergebenden Klassen geändert und der alte Code funktioniert nicht mehr:

    Alter Code:

    Code:
    public function addPropertiesToContentElement($contentModel, $buffer, $element)
    {
              
        $elementProperties = StringUtil::deserialize($element->element_properties, true);
        
        if (\count($elementProperties) > 0) {
            $elementPropertiesModel = ElementPropertiesModel::findMultiplePublishedByIds($elementProperties);
            $properties = [];
    
            if (null !== $elementPropertiesModel) {
                while ($elementPropertiesModel->next()) {
                    $properties[] = $elementPropertiesModel->cssClass;
                }
            }
    
            $cssClasses = explode(' ', $element->Template->class);
            $cssClasses = array_unique(array_merge((array) $cssClasses, $properties));
    
            if (\is_object($element->Template)) {
                $element->Template->class = implode(' ', $cssClasses);
                $element->Template->element_properties = $cssClasses;
    
                $buffer = $element->Template->parse();
            }
        }
        
    
        return $buffer;
    }
    In Contao 5.3 bekommen wir nun für $element eine Instance ContentProxy und ich kann nicht heraus finden, wie ich dort die CSS Klasse hinzufügen soll. Eventuell kann mir da jemand einen Tip geben.

    Viele Grüße
    Martin

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

    Standard

    Für die modernen Inhaltselemente machst du das am besten per Anpassung des content_element/_base Templates. Dafür schreibst du dir am besten eine Twig Extension wo du dir anhand der element_properties direkt ein HtmlAttributes Objekt zurück geben lässt, welches du dann mit den bestehenden attributes mergst.
    » sponsor me via GitHub or Revolut

  3. #3
    Contao-Nutzer
    Registriert seit
    22.04.2025.
    Beiträge
    4

    Standard

    Hi Spooky,

    vielen Dank für die schnelle Antwort. Ich bin recht neu was Contao angeht und habe den Code auch nicht geschrieben. Hättest du eventuell ein Beispiel oder eine Link für eine Erläuterung? Verwende ich die Twig-Extension dann immer noch im Hook oder wird das alles über die Extension gemacht. Leider haben wir auch noch html5 templates. Diese würden dann ja nicht damit funktionieren, oder?

  4. #4
    Contao-Nutzer
    Registriert seit
    22.04.2025.
    Beiträge
    4

    Standard

    Nach etwas recherche und überlegen haben wir uns überlegt direkt die $buffer Variable zu manipulieren, da wir das base Template nicht anfassen und das ganze möglichst dynamisch halten wollen. Wir haben die Vorgehensweise aus dem Bundle DieSchittigs/contao-classes-bundle übernommen und einfach per RegEx den Buffer angepasst:

    PHP-Code:
    $rgxp "/class\=\"[\w\s-]*content\-[\w\s-]*\"/m";
    $replace 'class="' $classes '"';
    $buffer preg_replace($rgxp$replace$buffer1); 
    Es gibt bestimmt elegantere Lösungen, aber für den Moment ist das ausreichend. Ein Refactoring ist geplant, aber zeitlich sitzt das gerade nicht drin.
    Eventuell ist die Lösung auch für jemanden anderes Hilfreich.

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

    Standard

    Zitat Zitat von mdrees Beitrag anzeigen
    da wir das base Template nicht anfassen und das ganze möglichst dynamisch halten wollen.
    Warum nicht? Es bleibt ja dynamisch.
    » sponsor me via GitHub or Revolut

Aktive Benutzer

Aktive Benutzer

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

Berechtigungen

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