Globale Template-Variable?

  • Hallo,

    wie kann ich es bewerkstelligen, dass auf jeder (!) Seite eine bestimmte Datei mit eingebunden wird, ohne dass Update-Gefährdete Dateien geändert werden?
    Es geht darum, dass eine Template-Variable global zur Verfügung stehen muss.

    Danek vorab für eure Infos.

    • Offizieller Beitrag

    Hallo bonuscommunity,

    wenn es nur darum geht, dass eine Template-Variable verfügbar ist, also definiert werden soll, könntest Du auf shouldDisplay@StructuredTemplate einen EventListener setzen, der dem Template die Variable via WCF::getTemplate()->assign() (oder auch $eventObj->assign()) zuweist.

  • Gut, es ist bereits ein Paket vorhanden, wo ich etwas ändern möchte.

    SQL
    INSERT INTO `wcf1_event_listener` (`listenerID`, `packageID`, `environment`, `eventClassName`, `eventName`, `listenerClassFile`, `inherit`, `niceValue`) VALUES
    (374, 133, 'user', 'StructuredTemplate', 'shouldDisplay', 'lib/system/event/listener/StructuredTemplateFacebookListener.class.php', 0, 0);

    Aber der Eventlistener wird nicht aufgerufen, aus welchem Grund auch immer. Muss man das noch wo anders definieren, damit er aufgerufen wird?

  • Wieso willst du per SQL einen Eventlistener einfügen? Dafür gibt es das Eventlistener-PIP ;)

    "A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP" — Leonard Nimoy

    • Offizieller Beitrag

    Das ist auf viele Arten problematisch:

    • Du setzt von Hand eine listenerID, dies wird von der Datenbank automatisch übernommen ("AUTO_INCREMENT")
    • Eventlistener sollten immer mit der korrekten packageID des Paketes ausgestattet werden, da diesen auch mitliefert
    • Bei einer Deinstallation des Plugins wird der Eintrag u.U. nicht korrekt entfernt (s.oben)


    Wenn du das Paket später einmal wieder installieren möchtest, fehlt dir der Eventlistener. Und Nein, man erinnert sich nicht mehr an so scheinbar unbedeutende Dinge, die vor 3 Monaten oder länger waren ;)

    • Offizieller Beitrag

    Hallo bonuscommunity,

    [...] aber mal sehen, ob es dann klappt.

    Ich nehme an, dass Du, als Du den EventListener einfach nur in die Datenbank eingefügt hast, nicht auch noch die enstprechende Cache-Datei gelöcht hast, was aber nötig gewesen wäre, da die Eventlistener gecacht werden. Aber das PIP ist dafür je gedacht und erspart Dir zusätzlich dann auch noch das Cache-Löschen - neben allen anderen Vorteilen ;).

  • Achso, okay. Aber ich finde es dauert länger, die gnazen Archive zusammen zu stellen, als das kurz in der Datenbank zu machen.

    *edit*
    Also, installiert ... Datie vorhanden, Eintrag in der DB-Tabelle vorhanden, jedoch wird der Listener nicht angesprochen?

    Einmal editiert, zuletzt von bonuscommunity (7. September 2010 um 20:02)

  • Mh, kein Aufruf des Listeners.

    Sollte ja auch richtig sein, oder? Steht ja dann richtig in der Datenbank und File ist auch da.

  • Hab's, hatte blöderweise im <plugin> was falsches stehen.

    Aber welche Methode wird denn bei jedem Seitenaufruf eingelesen? Sozusagen readData() generell.

    Gibt es darüber eine Übersicht oder so etwas? Die auf woltlab-wiki ist ja sehr bescheiden.

  • Wieso auf jeder Seite? Nimm die Quick-Loginbox (s. unten) raus und belass den Login auf der Loginseite.

    • Suche in "header.tpl" nach
      id="loginButton"
    • Ersetze es durch
      id="loginButtonNone"
    • Speichere das Template in einer eigenen Templategruppe, da sonst die Änderung bei einem Update weg sein könnte oder ein Update nicht richtig ausgeführt werden kann

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!