DB-Abfrage in Template

    • WBB 3.1.x

      DB-Abfrage in Template

      Mahlzeit,

      so langsam bekomme ich ja alles hin, was ich mir basteln wollte - auch mein Fußball-Tippspiel funktioniert einwandfrei. Da es aber immer wieder passiert, dass man vergisst, für die eine oder andere Partie zu tippen, würde ich hierfür gerne eine kleine Erinnerungsfunktion einbauen. Hierfür hatte ich mir gedacht, dass bei eingeloggten Usern, denen in den nächsten 3/5/7 Tagen noch Tipps fehlen, auf jeder Seite ein entsprechender Hinweis eingeblendet wird - vermutlich dort, wo bei Rückkehr auch der Link zu den neuen Beiträgen erscheint, also zwischen Hauptmenü und Breadcrumbs.

      Nur leider fehlt mir noch der Ansatz, dies umzusetzen. Die eigentlichen DB-Abfrage etc. ist kein Problem, das ganze müsste ich dann ja auch nur ganz unten ins Template des Headers einfügen. Nur leider scheint mir die include-Funktion nur für Templates ohne Variablen, d.h. ohne zugehöre PHP-Datei zu funktionieren.

      Wie komme ich zu meinem gewünschten Ergebnis?
      So, habe nun angefangen, mich an der Thematik zu versuchen. Hier mal mein erster Versuch, der leider noch nicht funktioniert. Ich wollte zunächst einfach mal das Wort Test unter dem Header einblenden, um die grundlegende Funktionalität zu testen. Abgezeigt wird aber nichts, bevor ich mir jetzt aber einen Ast suche, wollte ich mal fragen, ob der Code soweit stimmt.

      Auszug package.xml:

      Source Code

      1. <instructions type="install">
      2. <files>files.tar</files>
      3. <templates>templates.tar</templates>
      4. <eventlistener>eventlistener.xml</eventlistener>
      5. <groupoptions>groupoptions.xml</groupoptions>
      6. </instructions>
      7. <instructions type="update" fromversion="*">
      8. <files>files.tar</files>
      9. <templates>templates.tar</templates>
      10. <eventlistener>eventlistener.xml</eventlistener>
      11. <groupoptions>groupoptions.xml</groupoptions>
      12. </instructions>


      eventlistener.xml:

      XML Source Code

      1. <?xml version="1.0" encoding="utf-8"?>
      2. <!DOCTYPE data SYSTEM "http://www.woltlab.com/DTDs/eventlisteners.dtd">
      3. <data>
      4. <import>
      5. <eventlistener>
      6. <eventclassname>AbstractPage</eventclassname>
      7. <eventname>show</eventname>
      8. <listenerclassfile>lib/system/event/listener/AbstractPageNewPhotosListener.class.php</listenerclassfile>
      9. </eventlistener>
      10. </import>
      11. </data>


      AbstractPageNewPhotosListener.class.php:

      PHP Source Code

      1. <?php
      2. require_once(WCF_DIR.'lib/system/event/EventListener.class.php');
      3. class AbstractPageNewPhotosListener implements EventListener {
      4. public function execute($eventObj, $className, $eventName) {
      5. WCF::getTPL()->append('header', '<p>test</p>');
      6. }
      7. }
      8. ?>
      Eine Update Instruction benötigst du nur, wenn du eine neuere Version deines Plugins installierts.
      In deiner eventlistener.xml ist der DOCTYPE veraltet, schau dir dazu am besten neue Plugins mit eventlistener an. Außerdem müsstest du in deinem Fall

      XML Source Code

      1. <inherit>1</inherit>

      hinzufügen, denn die AbstractPage wird nie direkt aufgerufen, sondern es wird nur davon geerbt.
      Der Fehler in deiner Klasse ist, dass du den Platzhalter 'header' benutzen willst, dieser existiert jedoch nicht. Versuchs mal mit "additionalHeaderContents".

      Gruß


      WBB4-Plugins:

      Neu: cChat
      Neu: Erweitertes Dropdown Hauptmenü
      Sehr schön, ich danke dir. Das Testbeispiel funktioniert jetzt, das sollte ich jetzt auch auf weitere andere anwenden können.

      Noch eine kurze Frage zur Performance: Ich hatte gelesen, dass inherit da ziemlich suboptimal ist. Wie stark wirkt sich dies aus? Unter Umständen könnte ich auch damit leben, die Meldung nur auf der Startseite einzublenden.