WCF2: Menüpunkt für die eigene Seite

  • WCF 2

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

Nachdem bereits das erste Plugin erstellt ist, geht es nun daran, selbigem einen eigenen Menüpunkt anzulegen, welcher dann auch als aktiv gekennzeichnet wird, sofern man sich auf der Seite befindet. Hierbei wird dann auch ein Update ermöglicht.

Dank der Vereinfachung in Community Framework braucht es nicht viel, um einen Menüpunkt zu erstellen. Eine pageMenu.xml, eine Änderung in der PHP-Klassendatei sowie das Hinzufügen einer weiteren Sprachvariable. Um das Ganze dann noch als updatebares Paket zu erstellen, muss man auch die package.xml noch etwas modifizieren.

Am besten wird mit dem Erstellen der pageMenu.xml begonnen. Diese sieht folgendermaßen aus:

XML-Quellcode

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <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/pagemenu.xsd">
  3. <import>
  4. <pagemenuitem name="wcf.page.example">
  5. <controller><![CDATA[wcf\page\ExamplePage]]></controller>
  6. <position>header</position>
  7. </pagemenuitem>
  8. </import>
  9. </data>
Hierbei wird der Menüpunkt namens wcf.page.example hinzugefügt. Der Controller ist hier die Seite, auf die verlinkt werden soll. Als Position kann entweder header oder footer angegeben werden. Weitere Möglichkeiten wie Untermenüpunkte oder eine eigene Sortierung finden sich in der .xsd-Datei, wie bei .xml-Dateien üblich.

Als nächstes geht es zur Bearbeitung der Sprachvariablen, denn schließlich soll der Menüpunkt auch einen lesbaren Text anzeigen. Es muss demnach die Sprachvariable wcf.page.example hinzugefügt werden. Das ginge dann z.B. mit dieser Zeile innerhalb der .xml-Sprachdateien:

XML-Quellcode

  1. <item name="wcf.page.example"><![CDATA[Beispiel]]></item>

Die eigentliche Funktion, dass der Menüpunkt, der über die pageMenu.xml hinzugefügt wurde, auch beim Seitenaufruf als aktiv gekennzeichnet wurde, muss, wie bereits gesagt, in die Klasse eingefügt werden. Das wäre bei uns noch die Datei unter lib/page/ExamplePage.class.php Innerhalb der Klasse muss dann folgender Code hinterlegt werden:

PHP-Quellcode

  1. /**
  2. * @see wcf\page\AbstractPage::$activeMenuItem
  3. */
  4. public $activeMenuItem = 'wcf.page.example';
Die Datei sollte dann folgendermaßen aussehen:

PHP-Quellcode

  1. <?php
  2. namespace wcf\page;
  3. /**
  4. * Shows the example page.
  5. *
  6. * @author KittBlog Stile
  7. * @copyright 2013 kittblog.com
  8. * @license LGPL
  9. * @package com.kittblog.wcf.examplepage
  10. */
  11. class ExamplePage extends AbstractPage {
  12. /**
  13. * @see wcf\page\AbstractPage::$activeMenuItem
  14. */
  15. public $activeMenuItem = 'wcf.page.example';
  16. }
Alles anzeigen

Zu guter Letzt muss eigentlich nur die pageMenu.xml in der package.xml referenziert werden. Das ginge über diese Zeile bei den Installations-Anweisungen:

XML-Quellcode

  1. <instruction type="pageMenu">pageMenu.xml</instruction>
Die pageMenu.xml selbst wird demnach auch im Wurzelverzeichnis, also auf derselben Ebene wie die package.xml gespeichert.

Möchte man sein Paket auch mit Update-Anweisungen versehen, so muss man diese noch zusätzlich hinzufügen. Außerdem muss auf jeden Fall die Versionsnummer erhöht werden (hier: von 1.0.0 Alpha 1 zu 1.0.0 Alpha 2). Die Update-Anweisungen sehen dann folgendermaßen aus:

XML-Quellcode

  1. <instructions type="update" fromversion="1.0.0 Alpha 1">
  2. <instruction type="file">files.tar</instruction>
  3. <instruction type="language">language/*.xml</instruction>
  4. <instruction type="pageMenu">pageMenu.xml</instruction>
  5. </instructions>
Es müssen alle Dateien angegeben werden, die verändert oder hinzugefügt wurden. Die vollständige package.xml sollte nun folgendermaßen aussehen:

XML-Quellcode

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <package name="com.kittblog.wcf.examplepage" 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/maelstrom/package.xsd">
  3. <packageinformation>
  4. <packagename>Example page</packagename>
  5. <packagename language="de">Beispielsseite</packagename>
  6. <packagedescription>The first own example page for Community Framework 2.</packagedescription>
  7. <packagedescription language="de">Die erste eigene Beispielsseite für Community Framework 2.</packagedescription>
  8. <version>1.0.0 Alpha 2</version>
  9. <date>2013-07-21</date>
  10. </packageinformation>
  11. <authorinformation>
  12. <author>KittBlog Stile</author>
  13. <authorurl>http://kittblog.com</authorurl>
  14. </authorinformation>
  15. <requiredpackages>
  16. <requiredpackage minversion="2.0.0 Alpha 1">com.woltlab.wcf</requiredpackage>
  17. </requiredpackages>
  18. <instructions type="install">
  19. <instruction type="file">files.tar</instruction>
  20. <instruction type="template">templates.tar</instruction>
  21. <instruction type="language">language/*.xml</instruction>
  22. <instruction type="pageMenu">pageMenu.xml</instruction>
  23. </instructions>
  24. <instructions type="update" fromversion="1.0.0 Alpha 1">
  25. <instruction type="file">files.tar</instruction>
  26. <instruction type="language">language/*.xml</instruction>
  27. <instruction type="pageMenu">pageMenu.xml</instruction>
  28. </instructions>
  29. </package>
Alles anzeigen
Nun muss man nur noch die Dateien neu nach den bereits genannten Vorschriften packen und kann das Paket dann gleich als Update installieren.

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.875 mal gelesen

Kommentare 11

  • Fabii -

    Danke jetzt gehts :)

  • Black Rider -

    Du musst natürlich den Seitenmenü-Eintrag (= pageMenu) ebenfalls ändern.

  • Fabii -

    Ah ok, hab ich gemacht aus ExamplePage hab ich MeinePage gemacht und ich hab den Namen des Templates in meine.tpl geändert. Wenn ich jetzt auf den Link klicke Werk ich aber trotzdem noch auf Index.php/Example geleitet was dann natürlich zu einem Fehler führt. Ich kann aber wenn ich den Link im Brwoser direkt eingebe also Index.php/Meine aufrufen. Wie kann ich das jetzt noch anpassen das es auch mit dem Link geht?

  • Black Rider -

    Indem du den Klassennamen in der PHP-Datei änderst.

  • Fabii -

    Wie kann ich den Link des Plugins ändern? Also bei deinem Beispiel ist es ja index.php/Example aber wie kann ich das Example ersetzen?

  • Black Rider -

    Das Problem wird ab sofort hier diskutiert:
    kittblog.com/board/board9-weit…-das-erste-plug-in-hilfe/

  • Liveplay -

    Okay werde ich gleich machen.

  • Fighter456 -

    Melde dich bitte im Forum und hänge dein bisheriges Paket als Dateianhang an. Ohne das Paket gesehen zu haben, ist es in so einem Fall schlicht unmöglich, den Fehler zu erraten.

  • Liveplay -

    Nein, habe alles nochmal überprüft. Was mir allerdings spanisch vorkommt:

    Sobal ich das Packet installiere werden die Dateien nicht in den richtigen Ordner entpacket, ist dies denn möglich?

    Für die Template-Datei wird unter: wcf/templates noch ein Ordner Template erstellt, wo dann die teamcover.tpl entpacket wird.

    Ist dies denn richtig, soll dieser Ordner erstellt werden?

    Unter wcf/lib/page wird auch die Klassendatei nicht entpacktet z.M. ist diese optisch nicht vorhanden.

    Das Packet wirft aber keinen Fehler aus und erstellt die neue Seite mit Menüpunkt, lediglich die bereits beschriebene Fehlermeldung "Kein gültiger Link" wird ausgegeben beim Klick auf das MenueItem.

    Somit kann dann natürlich auch der Menüpunkt Controller "wcf\page\TeamcoverPage" auch nicht funktionieren die Klasse ist nicht vorhanden.

    Ich kann mir nun aber nicht erklären warum das so ist.

    Ich bin deine Tutorials noch dreimal durchgegangen und finde keinen Fehler?

    best regards

    Liveplay

  • Black Rider -

    Stimmen auch die Dateinamen überein, also z.B. teamcover.tpl und TeamcoverPage.class.php?
    Das Template sollte zudem unter /wcf/templates zu finden sein.
    Unter /wcf/lib/page dagegen sollte die Klassendatei sein (TeamcoverPage.class.php).

  • Liveplay -

    Hey,

    Super Guide den du hier veröffentlicht hast. Aber mal eine Frage.

    Ich habe es genauso gemacht, wie du, nur eben anstatt ExamplePage TeamcoverPage genommen. Plug-In wurde auch richtig installaiert etc. und Menüpunkt angelegt, aber wenn ich dann auf den Menübutton klicken kommt die Fehlermeldung:

    "Du hast einen ungültigen, oder nicht mehr gültigen Link aufgerufen", kannst du oder jemand anders sich vorstellen wieso das sein kann?

    Unter Seitenmenü im ACP wird als interner Link angegeben:

    wcf\page\Teamcover

    Ironischerweise finde ich aber nicht mal das passende Template zum Packet unter: wcf/lib/page ...

    best regards

    Liveplay