WCF2: Der erste eigene Template-Listener

  • WCF 2

Achtung: Diese Seite ist nur noch Teil eines Archivs und wird in Zukunft entfernt.

Nachdem die Beispielseite, die als Plugin hinzugefügt wurde, nun auch schon einen eigenen Menüpunkt besitzt, kommt nun eine Funktion, die vermutlich vielfach genutzt werden wird: Template-Listener. Damit ist es einfach möglich, zusätzlichen Template-Code in die Templates einzufügen.

Hierfür muss das Template der Beispielseite etwas angepasst werden, da jeder Listener - und so auch ein Template-Listener - ein Event benötigt, auf das er reagieren kann. Also einfach an gewünschter Stelle im Template example.tpl folgendes Event hinzufügen: {event name='example'}

Als nächstes kommt dann der eigentliche Template-Listener, der in einer templateListener.xml gespeichert wird:

XML-Quellcode

  1. <data xmlns="http://www.woltlab.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.woltlab.com http://www.woltlab.com/XSD/templatelistener.xsd">
  2. <import>
  3. <!-- user -->
  4. <templatelistener name="exampleListener">
  5. <environment>user</environment>
  6. <templatename>example</templatename>
  7. <eventname>example</eventname>
  8. <templatecode><![CDATA[<p class="event">{lang}wcf.page.example.templateListener{/lang}</p>]]></templatecode>
  9. </templatelistener>
  10. <!-- /user -->
  11. </import>
  12. </data>
Alles anzeigen
Hierbei wird der Template-Listener namens exampleListener hinzugefügt. Das geschieht in der Benutzer-Umgebung (und nicht im ACP) im Template example und zwar beim Event example.
Der Template-Code, der hinzugefügt wird, ist dann <p class="event">{lang}wcf.page.example.templateListener{/lang}</p>. Dazu habe ich mir die Sprachvariable wcf.page.example.templateListener neu angelegt.

Nun muss nur noch die package.xml mit folgender Anweisung aktualisiert werden:

XML-Quellcode

  1. <instruction type="templateListener">templateListener.xml</instruction>
Sofern man wieder Update-Anweisungen hinzufügen möchte, darf man nicht vergessen, dass diese in jedem Anweisungsblock stehen müssen. Ich habe bei mir z.B. nun folgende zwei Update-Anweisungsblöcke:

XML-Quellcode

  1. <instructions type="update" fromversion="1.0.0 Alpha 1">
  2. <instruction type="file">files.tar</instruction>
  3. <instruction type="template">templates.tar</instruction>
  4. <instruction type="language">language/*.xml</instruction>
  5. <instruction type="pageMenu">pageMenu.xml</instruction>
  6. <instruction type="templateListener">templateListener.xml</instruction>
  7. </instructions>
  8. <instructions type="update" fromversion="1.0.0 Alpha 2">
  9. <instruction type="template">templates.tar</instruction>
  10. <instruction type="language">language/*.xml</instruction>
  11. <instruction type="templateListener">templateListener.xml</instruction>
  12. </instructions>
Alles anzeigen
Da auch das Template geändert wurde, muss das auch in die Update-Anweisung für Version 1.0.0 Alpha 1.

Das Ergebnis sollte dann folgendermaßen aussehen:


Bei Fragen u.ä. stehe ich natürlich jederzeit gerne zur Verfügung.


Über den Autor
Ich bin Webentwickler in Stuttgart und administriere Server seit vielen Jahren. In diesem Blog erstelle ich hauptsächlich Tutorials für andere Webentwickler, Webdesigner und Serveradministratoren.
-------------------------------------------------------------------------------------------------------------------------------------
I’m a web developer in Stuttgart, Germany, and server administrator since many years. This blog mainly contains a tutorial set for other web developer, web designer and server administrators.

4.692 mal gelesen

Kommentare 14

  • Black Rider -

    Das Tutorial veranschaulicht natürlich nur das Prinzip. Natürlich war es hier nicht notwendig, sollte eben nur zeigen, wie es geht.

  • LordHelix -

    Das Tutorial hat mir leider nicht näher bringen können in wiefern ein TemplateListener nötig ist, da ich das auch mit einer einfachen Sprachvariable im Template hätte hinzufügen können.

    Inwiefern kann man den Listener nutzen und ist sinnvoll?

    Tut mir leid, das sind meine zweiten Schritte, aber es wird bestimmt , wenn ich genug fragen darf und hilfe zur Selbsthilfe bekomme =)

  • Black Rider -

    Effektiv geht das nur durch Einlesen in die Technik des Frameworks.

  • Sporny -

    Ist es denn überhaupt möglich, eigenen PHP Code einzufügen, ohne ihn komplett umbauen zu müssen?
    Oder muss ich da echt soo tief in die WCF/Plugin-Materie reinlesen?

  • Black Rider -

    Nein, das geht über die Template-Engine nicht.

  • Sporny -

    PHP Code lässt sich damit aber nicht einfügen oder?

    Habe es mit "{include file='myFile'}" versucht.... war aber leider vergeblich :( oder mache ich etwas falsch?

  • Logan -

    Ja, danke die Idee ist mir auch vorhin gekommen.

    LG

  • Black Rider -

    Das geht in den Sprachdateien deines Paketes, genaueres dazu findest du in Teil 1:
    kittblog.com/article/2/communi…-das-erste-eigene-plugin/

    Ein Template-Listener ist nicht nur für einen einzigen Zweck gedacht. Man kann Inhalte hinzufügen oder spätere Inhalte beeinflussen. Letztendlich kann aber immer nur Code durch einen Template-Listener hinzugefügt werden.

  • Logan -

    Hi,
    danke erstmal für das Tutorial.
    Jedoch habe ich noch eine Frage: Ich habe das genauso gemacht wie du, jetzt wird mir jedoch noch im Content zusätzlich einfach nur unter dem anderen Text "wcf.page.example.templateListener" ausgegeben.
    Du sagtest, du hättest dir die Sprachvariable angelegt ? Wo geht das ?

    Und noch eine Frage: Das ganze hat dann einfach nur den Zweck das ich ein Template editieren kann, und das dann auf dieser Seite eingefügt wird, wenn ich das richtig verstanden habe ?

    LG

  • dartgott -

    Danke dir :thumbsup:

  • Black Rider -

    Das gibt an, ob der Template-Listener im Template für das Frontend (user) oder im Template für das ACP (admin) wirkt, falls es das Template in beiden gibt.

    Für den Include kannst du ja einfach folgendes machen:
    {include file='myFile'}

  • dartgott -

    user
    Wofüt steht das?

    Achja, schön beschrieben das Tutorial :)
    Kann ich da auch ein Template includen über einen Templatelistener?
    Oder muss der Code zwischen ..... stehen.

  • Nico Rinker -

    Schöne Tutorials! :)

  • CIA JOE -

    Bookmarked. :woot: