Contao-Camp 2024
Ergebnis 1 bis 4 von 4

Thema: Zugriff auf einzelne Content-Elemente im Template

  1. #1
    Contao-Nutzer
    Registriert seit
    14.07.2020.
    Beiträge
    10

    Frage Zugriff auf einzelne Content-Elemente im Template

    Hallo liebe Community,

    im Template vom Nachrichtenleser werden mit
    PHP-Code:
    $this->text 
    alle Content-Elemente im Frontend ausgegeben.
    Weiß jemand, wie ich spezifische Content-Elemente der Nachricht einzeln ausgeben kann?
    Ich habe bereits herausgefunden, dass die Funktion text folgendermaßen funktioniert:
    PHP-Code:
        $objTemplate->text = function () use ($id)
                {
                    
    $strText '';
                    
    $objElement ContentModel::findPublishedByPidAndTable($id'tl_news');

                    if (
    $objElement !== null)
                    {
                        while (
    $objElement->next())
                        {
                            
    $strText .= $this->getContentElement($objElement->current());
                        }
                    }

                    return 
    $strText;
                }; 
    Das hilft mir nur leider nicht, auf die einzelnen Elemente zuzugreifen. So wie ich das verstehe, wird in dieser Schleife ein einziger String, der alle Content-Elemente enthält, generiert. Und die einzelnen Stings der Content-Elemente werden dann mittels
    PHP-Code:
    $this->getContentElement($objElement->current() 
    generiert. Leider weiß ich nicht, wie ich mittels dieser Information innerhalb eines news_full-Templates auf einzelne Content-Elemente einer Nachricht zugreifen kann.

    Hat da jemand eine Idee?

    Liebe Grüße

    Schreiberling

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

    Standard

    Was genau möchtest du denn machen? Aber grundsätzlich könntest du ja genau das machen, was in der "text" Funktion des Templates gemacht wird.

  3. #3
    Contao-Nutzer
    Registriert seit
    14.07.2020.
    Beiträge
    10

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Was genau möchtest du denn machen? Aber grundsätzlich könntest du ja genau das machen, was in der "text" Funktion des Templates gemacht wird.
    Innerhalb der "text"-Methode liegen ja wieder alle Möglichen Elemente drin. Die Überschrift, der Artikel etc.

    In meiner Nachricht habe ich einen Text und eine Liste. Diese würde ich gerne per Templates in zwei verschiedenen Nachrichtenleser-Modulen ausgeben lassen. Also ein Modul, das nur die Liste ausgibt und eines, das nur den Text ausgibt.
    Innerhalb der "text"-Funktion werden die einzelnen Content-Elemente bzw. deren Strings abgerufen und durch die Schleife verkettet. Ich verstehe jedoch nicht genau, wie dieser Abruf funktioniert. Ich möchte herausfinden, wie ich einzelne Content-Elemente innerhalb einer Schleife idnetifizieren kann (über ihre ID?). Benötige ich für sowas eine Schleife, die alle Elemente durchsucht, oder kann ich Content-Elemente direkt über Identifier ansprechen? Zudem kommt auch, dass ich die Hook getContentElement() nicht verstehe.

    Ich hoffe, das erklärt mein Problem besser.

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

    Standard

    Wie du einzelne Inhaltselemente identifizierst, musst du dir selbst überlegen (bspw. Reihenfolge, CSS Klasse, CSS ID).

    Wie du die Inhaltselemente bekommst siehst du wie gesagt in der "text" Methode. Ob du dann "in einer Schleife" darauf zugreifen musst oder nicht, hängt davon ab, wie du die Inhaltselemente identifizierst.

    Wenn du die Inhaltselemente bspw. über die Reihenfolge identifizierst, also bspw. das Text Element immer als erstes kommt und das Listenelement immer als zweites, kannst du dir ja ein Array der Collection zurück geben lassen und per Array Index darauf zugreifen.

    PHP-Code:
    $elements = \Contao\ContentModel::findPublishedByPidAndTable($this->id'tl_news');

    if (
    null !== $elements) {
        
    $elements $elements->getModels();
        
    $element1 $elements[0];

        if (isset(
    $elements[1])) {
            
    $element2 $elements[1];
        }


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
  •