Ergebnis 1 bis 8 von 8

Thema: generatePage Hook - Fragen

  1. #1
    Contao-Nutzer
    Registriert seit
    30.09.2011.
    Beiträge
    47

    Standard generatePage Hook - Fragen

    Hi

    Wie schon an andere Stelle geschrieben, möchte ich gern, das man per URL-Parameter (GET) das Template wechseln kann. Leider habe ich noch keinen Lösungsansatz gefunden. Ich bin auf den Hook "generatePage" gestossen. Lässt sich mein Vorhaben damit realisieren?

    Momentan habe ich den Hook in der config registriert: (system/config/config.php)

    PHP-Code:
    $GLOBALS['TL_HOOKS']['generatePage'][] = array('Layout''onGeneratePage'); 
    im Ordner system/modules/layout habe ich die Datei Layout.php angelegt.

    PHP-Code:
    <?php

    class Layout
    {

        public function 
    onGeneratePage($objPage)
        {
            
    $objPage->template 'fe_test';
        }
    }
    Leider wird die Methode nicht ausgeführt. fe_test.xhtml ist momentan als leere Datei angelegt. Habe ich irgendwo einen Denkfehler? Und zweitens: Kann man direkt in der onGeneratePage Methode auf $this->Input->get() zugreifen.

    Danke schon mal im Voraus

    Gruß

    lonestar

  2. #2
    Contao-Fan Avatar von Bandyt
    Registriert seit
    22.04.2010.
    Ort
    Bremen
    Beiträge
    808

    Standard

    Ein neues Template initialisierst du wie folgt:

    Code:
    $objTemplate = new FrontendTemplate("fe_test");
    
    $this->Template=$objTemplate;
    Ob das an deiner Stellt funktioniert, musst du ausprobieren.

    Zitat Zitat von lonestar Beitrag anzeigen
    Und zweitens: Kann man direkt in der onGeneratePage Methode auf $this->Input->get() zugreifen.
    Sollte gehen, aber einfach mal ausprobieren.
    Meine Erweiterungen: League Manager | Forum

  3. #3
    Contao-Nutzer
    Registriert seit
    30.09.2011.
    Beiträge
    47

    Standard

    Vorab Wenn ich den Hook in der config registriere, greift dieser gar nicht. Erst in der localconfig gehts.


    @Bandyt

    Sorry, geht beides nicht. Weder initialisiert er ein neues Template, noch kann ich auf die GET-Variable zugreifen (auch nicht direkt über $_GET). Auf die get-Variable kann ich nur im Hook "parseFrontendTemplate" zugreifen. Hier kann ich aber auch weder das Template überschreiben, noch ein neues initialisieren.

    Habs erst mal auf die Quick&Dirty-Methode gemacht. Und es direkt im fe_page Template gelöst. Also Get-Variable auswerten und dann entsprechend der Variable ein Template includen.

    Gruß

    Lonestar

  4. #4
    Contao-Fan Avatar von Bandyt
    Registriert seit
    22.04.2010.
    Ort
    Bremen
    Beiträge
    808

    Standard

    Deine Klasse ist falsch deklariert. Außerdem habe ich mehr Parameter in der Funktion. Probiere mal bitte das hier:
    Code:
    <?php 
    
    class Layout extends Frontend
    { 
    
        public function onGeneratePage(Database_Result $objPage, Database_Result $objLayout, PageRegular $objPageRegular) 
        { 
            $objPage->template = 'fe_test'; 
        } 
    }
    ?>
    EDIT: Den Code musst du noch anpassen
    Meine Erweiterungen: League Manager | Forum

  5. #5
    Contao-Nutzer
    Registriert seit
    30.09.2011.
    Beiträge
    47

    Standard

    @Bandyt

    Hab ich schon vermutet, das ich die Frontend-Klasser erweitern muß. Danach kann ich zwar auf die get-variable zugreifen, aber leider immer noch nichts am Template ändern.

    Irgendwie bleibt mir die Logik der Hooks verschlossen

    PHP-Code:
    // HOOK: modify the page or layout object
            
    if (isset($GLOBALS['TL_HOOKS']['generatePage']) && is_array($GLOBALS['TL_HOOKS']['generatePage']))
            {
                foreach (
    $GLOBALS['TL_HOOKS']['generatePage'] as $callback)
                {
                    
    $this->import($callback[0]);
                    
    $this->$callback[0]->$callback[1]($objPage$objLayout$this);
                }
            } 
    So stehts in der PageRegular.php. Da steht ja eindeutig, das man Page bzw. Layoutobject modifizieren kann. Nur wie?

    Er gibt mir mit $objLayout->template zwar das aktuelle Template zurück, aber ändern kann ich es nicht, bzw. habe ich keine Methode gefunden, mit das Template zu setzen.

    Wenn ich mir die einzelnen Objekte mit print_r ausgeben lassen, scheinen auch alle Eigenschaften protected zu sein.

    Gruß

    Lonestar

  6. #6
    Contao-Nutzer
    Registriert seit
    30.09.2011.
    Beiträge
    47

    Standard

    Kann mir keiner weiterhelfen?


    Gruß

    Lonestar

  7. #7
    Contao-Nutzer
    Registriert seit
    24.11.2009.
    Ort
    Fläsch
    Beiträge
    248

    Standard

    Ich möchte mich der Frage von lonestart gleich anschliessen. In meinem Fall geht es darum, dass ich je nach Request bestimmte Module, welche im Layout definiert sind, nicht laden lassen möchte. Beim durchstöbern des Codes bin ich auf dei Hooks generatePage und getFrontendModule (steht nicht in der Hooks-Doku) gestossen.

    Bei generatePage stellt sich mir die gleiche Frage wie lonestar, wie kann ich das Layout abändern? Da es ja ein Database_Record ist, kann ich da nicht gross was daran ändern. Also wenn ich z.B. in meinem Hook schreibe $objLayout->modules= ""; hat das keinen Einfluss auf Rendering (obwohl $objLayout als Referenzparameter deklariert ist).

    Bei getFrontendModule ist mir nicht ganz klar, wie da auf die Generierung Einfluss nehmen soll. Da wird wohl ein Rückgabewert erwartet, dieser wird aber im Script nirgends (lesend) verwendet. Ich kann an $objRow (ein DB_Mysql_Result) wohl Änderungen vornehmen. Das hilft mir aber nicht weiter dabei, das Modul nicht weiter laden zu lassen.

    Hat einer eine Idee wie ich verhindern kann, dass (unter bestimmten Umständen) ein Modul geladen wird?

    UPDATE:
    Für Catalog Module habe ich eine Lösung gefunden. Einfach im getFrontendModule Hook $objRow->catalog = ""; ausführen, damit wird die Klasse ModuleCatalog gar nicht erst die generierung durchlaufen, weil diese prüft ob catalog == '' oder nicht. Dies aber lediglich ein Workaround der für Catalog funktioniert und nicht allgemein gültig ist. Schön wäre hier eine Möglichkeit die für alle Module funktioniert.
    Geändert von bubblez (17.02.2012 um 18:43 Uhr)
    http://www.ideadapt.net - where ideas become code

  8. #8
    Contao-Fan Avatar von webster
    Registriert seit
    14.09.2010.
    Ort
    Kiel
    Beiträge
    460

    Standard

    Ich habe zu diesem Thema gestern ausführlich in einem anderen Thread gepostet:
    https://www.contao-community.de/show...l=1#post203915
    Was ist das? - Blaues Licht - Und was macht es? - Es leuchtet blau...

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
  •