Ergebnis 1 bis 4 von 4

Thema: foreach im Zusammenhang mit outputBackendTemplate und parseTemplate

  1. #1
    Contao-Fan Avatar von Stranger
    Registriert seit
    20.06.2009.
    Ort
    Blankenburg
    Beiträge
    746
    Partner-ID
    5635
    User beschenken
    Wunschliste

    Standard foreach im Zusammenhang mit outputBackendTemplate und parseTemplate

    Hallo,

    ich verwende parseTemplate, um die bestehenden Templatevariablen auszulesen und outputBackendTemplate, um das Template zu manipulieren.

    Das funktioniert soweit auch ganz gut, aber sobald innerhalb meiner parseTemplate Funktion eine foreach Schleife ins Spiel kommt, kommt meine outputBackendTemplate Funktion nicht mehr klar.
    Ich erhalte ständig den Fehler Warning: Invalid argument supplied for foreach() in system/modules/test/MyTestModule.php on line 48

    An dem Array $objTemplate->modules kann es nicht liegen, weil mir das bei print_r(); auch völlig korrekt angezeigt wird.
    Danke schon mal, falls mir jemand einen Tipp geben kann.


    PHP-Code:
    class MyTestModule extends \Backend
    {

    protected 
    $strTemplate 'be_main';



      public function 
    MyOutputBackendTemplate($strContent$strTemplate)
      { 
    //print_r($strTemplateVars);
        
    if ($strTemplate == 'be_main')
        {
            
    $strContent str_replace('</div><div id="main">',$this->MyParseTemplate($objTemplate).'</div><div id="main">sdsd'$strContent);
        }
        return 
    $strContent;
      }


      public function 
    MyParseTemplate($objTemplate)
      {
    //print_r($objTemplate->modules);
        // open container
        
    $strNavigation '<h1>Test/h1><div id="tl_navigation">
    <a href="'
    .$objTemplate->request.'#skipNavigation" class="invisible">'.$objTemplate->skipNavigation.'</a>
    '
    ;

        foreach (
    $objTemplate->modules as $strGroup=>$arrModules) {
                    
    $strNavigation .= $strGroup;
            }

        
    //echo $strNavigation2;
    $strNavigation .= '</div>';

        return 
    $strNavigation;
      }


    In der config.php steht:
    PHP-Code:
    /**
     * Hooks
     */

    $GLOBALS['TL_HOOKS']['outputBackendTemplate'][] = array('MyTestModule''MyOutputBackendTemplate');
    $GLOBALS['TL_HOOKS']['parseTemplate'][] = array('MyTestModule''MyParseTemplate'); 
    Du willst dich bei mir bedanken?
    Ich freue mich über Geschenke von meiner Amazon-Wunschliste.

    Contao-Anwender seit 2008
    Contao-Entwickler seit 2013, mehr als 50 Contao Erweiterungen programmiert

    Mein Unternehmen aus Blankenburg (Harz): Fast & Media

  2. #2
    Contao-Urgestein Avatar von Tim G
    Registriert seit
    13.02.2010.
    Ort
    Lübeck
    Beiträge
    2.210
    User beschenken
    Wunschliste

    Standard

    Einfach einen leeren Array oder Null vorher abfangen mit if(count(...) < 1) return...
    Das sollte man vor foreachs immer machen. Oder das foreach in der if ausführen, wenn nicht leer.
    Es kann schon sein, dass die Variable mal leer bleibt.


    Sent from my iphone using Tapatalk
    http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

  3. #3
    Contao-Fan Avatar von Stranger
    Registriert seit
    20.06.2009.
    Ort
    Blankenburg
    Beiträge
    746
    Partner-ID
    5635
    User beschenken
    Wunschliste

    Standard

    Jetzt gibt er mir leider gar nichts mehr aus. Hab fast das Gefühl Contao scheint den Array fehlerhaft zu übergeben!?
    Obwohl wie gesagt bei print_r(); alles korrekt zu sein scheint.
    Ich verwende übrigens Contao 3.1

    Aber danke für den Hinweis, wieder was gelernt
    Du willst dich bei mir bedanken?
    Ich freue mich über Geschenke von meiner Amazon-Wunschliste.

    Contao-Anwender seit 2008
    Contao-Entwickler seit 2013, mehr als 50 Contao Erweiterungen programmiert

    Mein Unternehmen aus Blankenburg (Harz): Fast & Media

  4. #4
    Contao-Urgestein Avatar von Tim G
    Registriert seit
    13.02.2010.
    Ort
    Lübeck
    Beiträge
    2.210
    User beschenken
    Wunschliste

    Standard

    Ich hab das mal nach gebaut.
    Also der parseTemplate Hook gibt mir erstmal gar keinen Array über das Objekt.
    Du hast vielleicht aber irgendwo ein Modul, dass das Feld "modules" beschreibt und ausließt, das kann sein.

    Ich würds so aufbauen:
    Dann kannst du schonmal Templates ausschließen, die du dar nicht brauchst.

    // work on navigations
    PHP-Code:
    if($objTemplate->getName() == 'mod_navigation')
    {
        if(
    $objTemplate->modules)
        {
                foreach(
    $objTemplate->modules as $k => $v)
                    {
                        
    //...
                    
    }
        }

    http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

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
  •