Contao-Summit 2026
Ergebnis 1 bis 9 von 9

Thema: Navigation erweitern: Template-Variable hinzufügen

  1. #1
    Contao-Nutzer
    Registriert seit
    17.07.2010.
    Beiträge
    127

    Standard Navigation erweitern: Template-Variable hinzufügen

    Hallo zusammen

    Ich habe ein Modul, das die Navigationspunkte im FE um einen Beschreibungstext erweitert. Die Beschreibung wird pro Seite in den Seitenoptionen festgelegt.
    Mein Modul erweitert das Modul Navigationsmenü um eine Checkbox, zum aktivieren der Beschreibung. Soweit kein Problem.

    Wie bringe ich nun aber die Beschreibung am wenigsten einschneidend in das nav_default.html5 bzw. das für die Navigation verwendete Template?
    Praktisch wäre es, wenn ein Administrator im Contao einfach nur das nav_default.html5 duplizieren muss und an der gewünschten Stelle <?php echo $this->description; ?> einfügt.

    Gibt es eine Möglichkeit, ohne die komplette Methode renderNavigation() in der Klasse Module zu duplizieren?

    Mfg
    sans

  2. #2
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.476
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    Wahrscheinlich ausschliesslich über den parseTemplate-Hook und somit nur für Versionen >2.10
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

  3. #3
    Contao-Nutzer
    Registriert seit
    17.07.2010.
    Beiträge
    127

    Standard

    Danke für die Antwort.
    Gibt's Module oder Codes die den Hook parseFrontendTemplate verwenden, damit ich mir anschauen kann wie ich innerhalb meiner Methode auf die Template-Vars zugreifen kann?

  4. #4
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.476
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    Nicht parseFrontendTemplate, damit kommst Du nicht ans Ziel! parseTemplate ist was Du suchst

    http://dev.contao.org/projects/typol...plate.php#L236

    PHP-Code:
    public function parseMyTemplate($objTemplate)
    {
       if (
    $objTemplate->getName() == 'nav_default')
       {
          
    $objTemplate->myNewVarForThisTemplate 'foobar';
       }

    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

  5. #5
    Contao-Nutzer
    Registriert seit
    17.07.2010.
    Beiträge
    127

    Standard

    Danke Tofal, ein Stück weiter bin ich gekommen. Jetzt kann ich anhand der ID in tl_page die Beschreibung auslesen.
    Die Beschreibung weise ich dann dem Template zu. Allerdings wird - logischerweise - die neue Template Variable immer wieder überschrieben. Und ich komm nicht mehr weiter
    Praktisch wäre es, das $items-Array um meine Beschreibung zu erweitern. Aber das Array wird scheinbar erst nach meiner Bearbeitung erstellt...

    PHP-Code:
        public function parseNavTemplate($objTemplate)
        {        
            if (
    $objTemplate->getName() == 'nav_default')
            {
                
    // .:TODO Make following code suck less
                // Intention: filter out objects and get page links of all the different 
                // arrays (why anyways?) in a flat hierarchy to then loop through the 
                // id's to find the description. 
                
                // Loop through the $objTemplate
                
    foreach ($objTemplate->getData() as $value
                {
                    
    // Only handle arrays
                    
    if (is_array($value)) 
                    {
                        
    // Loop through all the values e.g. page links in all the levels
                        
    foreach ($value as $pagelink
                        {
                            
    $objCurrentPage $this->Database->prepare("SELECT navDescription FROM tl_page WHERE id = ?")->execute($pagelink['id']);
                            
    $arrRow $objCurrentPage->fetchRow();
                            
    $objTemplate->desc $arrRow[0]; // <==== PROBLEM: gets overriden every time                
                        
    }
                    }
                }
            }
         
            return 
    $objTemplate;
        } 
    Ist es wirklich nötig die foreach zu verschachteln, nur um an die jeweilige ID zu kommen?

    Mfg
    sans

  6. #6
    Community-Moderator Avatar von schman
    Registriert seit
    19.06.2009.
    Ort
    Dornbirn
    Beiträge
    3.739
    User beschenken
    Wunschliste

    Standard

    Soweit ich das sehe schreibst du bei jedem Durchlauf die Description in den ersten Teil des Arrays, sollte nicht für jeden durchlauf dieses quasi drangehängt werden?
    Im Sinne von
    PHP-Code:
    $objTemplate->desc $arrRow[]; 
    Kein Privat Support via PM.

  7. #7
    Contao-Nutzer
    Registriert seit
    17.07.2010.
    Beiträge
    127

    Standard

    Mit dem Array für die Beschreibungen müsste ich dann aber eine weitere foreach-Schleife sowie eine if-Abfrage im Navigationstemplate einführen, die mir mit der ID (oder anderes) aus $item dann erst die korrekte Beschreibung findet. Oder?
    Damit würde aus einer geplanten sauberen Lösung ein einziger Hack werden...

    Fällt niemandem eine Möglichkeit ein, die Beschreibung direkt ins $items-Array der Navigation zu bekommen?

  8. #8
    AG Core-Entwicklung
    Registriert seit
    16.10.2009.
    Ort
    Bad Lausick
    Beiträge
    437

    Standard

    Also in die nav_*.* Templates solltest du alle Felder einer Seite übergeben bekommen, also auch deinen Beschreibungstext, da solltest du nichts anpassen müssen. Lediglich ein zusätzliches echo im Template sollte schon reichen?
    Ihr Partner für Contao und Webentwicklung: http://www.hofff.com.

  9. #9
    Contao-Nutzer
    Registriert seit
    17.07.2010.
    Beiträge
    127

    Standard

    Hi backbone. Jep, das habe ich am Wochenende nach mehreren Stunden auch entdeckt

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
  •