gelöst Smarty Variable in Klassen-overload - die zweite

Thema wurde von MJ, 5. März 2018 erstellt.

  1. MJ

    MJ Erfahrener Benutzer

    Registriert seit:
    28. April 2011
    Beiträge:
    476
    Danke erhalten:
    50
    Danke vergeben:
    52
    #1 MJ, 5. März 2018
    Zuletzt bearbeitet: 5. März 2018
    Guten Tag
    ---
    Eins vorneweg - der Thread direkt vor mir zum gleichen Thema brachte mich nicht weiter. Da er aber bereits als gelöst markiert wurde, muss ich einen neuen eröffnen
    ---

    Ich versuche, eine Variable füllen auf die ich im Smarty-Template zugreifen kann. Aber mein content wird am Ende des Scripts ausgegeben. Egal ob ich die Variable aufrufe oder nicht. Ich habe mir die Beispiele angesehen, finde aber keines wo explizit eine Variable erstellt und im Template ausgegeben wird. Ich poste mal meinen Code.
    GXUserComponents/overloads/ApplicationBottomExtenderComponent/test_ApplicationBottomExtender.inc.php:
    PHP:
    class test_ApplicationBottomExtender extends test_ApplicationBottomExtender_parent
    {
        function 
    proceed()
        {
        
    $html '<h3>TEST ApplicationBottomExtender</h3>
        '
    ;
      
            
    $this->v_output_buffer['TESTVAR'] = $html;
      
        
    parent::proceed();
        }
      
    }
    Im Template versuche ich dann darauf zuzugreifen: in der bottom.html mit {$TESTVAR}
    Eigentlich würde ich es gern in der footer.html ausgeben - aber so oder so wird das ignoriert und einfach am Ende vor dem schließenden </body> ausgegeben. Was mache ich falsch?

    Eigentlich müsste ich die FooterContentView überladen aber das funktioniert bei mir genauso wenig -,-

    ---

    Eine weitere Frage zum Verständnis: Ist der Ordner overloads in GXModules identisch mit dem in GXUserComponents? (..bis auf den Unterschied das beim GXModules noch weitere Dateien laut Struktur mit integriert werden?)

    Ich wäre sehr dankbar für Hinweise!
    Liebe Grüße, Jens
     
  2. Anonymous

    Anonymous Administrator
    Mitarbeiter

    Registriert seit:
    26. April 2011
    Beiträge:
    1.024
    Danke erhalten:
    794
    Danke vergeben:
    198
    Hi,

    du musst dafür die system/classes/layout/BottomContentView.inc.php überladen, da die die bottom.html befüllt und nicht die ApplicationBottomExtender. Die ApplicationBottomExtender ist nicht für die bottom.html zuständig. In der ApplicationBottomExtender wird jeglicher Code immer nur direkt ausgegeben.

    Die Overloads sind mit der GXUserComponets indentisch, es wird nur in eine extra GXModules Ordner durchsucht.
     
  3. MJ

    MJ Erfahrener Benutzer

    Registriert seit:
    28. April 2011
    Beiträge:
    476
    Danke erhalten:
    50
    Danke vergeben:
    52
    Guten Morgen Till,

    danke für den Hinweis zur contentView. Die zweite Frage hast du mir beantwortet. Aber wie zum Horst übergebe ich dabei eine Variable ans Smarty. Das ist ja mein Hauptproblem. Am Cache liegt's nicht - die Änderungen kommen ja an aber ich kann keine Variable ansprechen. Ich teste es am FooterContentView mit der footer.html - das müsste ja passen.

    Ist das hier falsch?
    $this->v_output_buffer['foo'] = 'Hi, ich bin Tom';

    oder so?
    $this->content_array['foo'] = 'barbara';

    Und so wird es doch ausgegeben: {$foo}

    Oder?
     
  4. Torben Wark

    Torben Wark Gambio GmbH

    Registriert seit:
    15. Juli 2014
    Beiträge:
    2.581
    Danke erhalten:
    1.175
    Danke vergeben:
    399
    Auf diesem Weg sollte die Variable $foo direkt im Smarty verfügbar sein.

    Ja korrekt.

    Schon mal mit einem beherzten {debug} im Template geschaut, ob deine Variable dort ankommt?
     
  5. MJ

    MJ Erfahrener Benutzer

    Registriert seit:
    28. April 2011
    Beiträge:
    476
    Danke erhalten:
    50
    Danke vergeben:
    52
    #5 MJ, 6. März 2018
    Zuletzt bearbeitet: 6. März 2018
    Hallo Torben
    Danke, ja hab ich - ich hatte gestern einen sehr 'beherzten' Tag - sie kommt nicht an - Mein Fehler liegt sicher beim Überladen

    -- oh man -- ich hab es gerade gefunden

    ich habe immer statt __construct()
    PHP:
    function proceed() {
        .. 
    bla ..
        
    parent::proceed();
    }
    genommen ..

    ----

    Wird proceed() nur bei extendern genommen?
     
  6. Anonymous

    Anonymous Administrator
    Mitarbeiter

    Registriert seit:
    26. April 2011
    Beiträge:
    1.024
    Danke erhalten:
    794
    Danke vergeben:
    198
    Hi,

    du musst dafür die prepare_data Methode überladen, die __construct solltest du nach Möglichkeit vermeiden. Die proceed Methode gibt es nur bei Extendern und bei Controllern bei ContentView gibt es die prepare_data Methode, die die Smarty Variablen zuweisen.
     
  7. MJ

    MJ Erfahrener Benutzer

    Registriert seit:
    28. April 2011
    Beiträge:
    476
    Danke erhalten:
    50
    Danke vergeben:
    52
    Danke Till - das hat mir sehr geholfen.
     
  8. MJ

    MJ Erfahrener Benutzer

    Registriert seit:
    28. April 2011
    Beiträge:
    476
    Danke erhalten:
    50
    Danke vergeben:
    52
    OFFTOPIC

    Ich finde nichts um den Thread als GELÖST zu markieren.Wenn man im ersten Beitrag auf Bearbeiten klickt und dort auf Weitere Einstellungen, dann kommt im Chrome das:
    --
    Chrome hat auf dieser Seite ungewöhnlichen Code erfasst und diese Seite daher blockiert, um Ihre personenbezogenen Daten wie Passwörter, Telefonnummern oder Kreditkarteninformationen zu schützen.
    ERR_BLOCKED_BY_XSS_AUDITOR
    --