FluxBB.org

 
Übersetzungen dieser Seite?:

Extensions entwickeln

Das Erweiterungssystem (engl. extension system) erlaubt es Dir auf einfachste Art und Weise FluxBB's Funktionalität zu erweitern ohne den original Source Code anzurühren. FluxBB nutzt dazu sogenannte Hooks und Manifest Dateien, welche den Extensions beigelegt sind. In diesem Artikel bekommst Du Informationen über die grundsätzliche Benutzung von Hooks, das Format der Manifest Datei und wie die zugehörigen Dateien zu organisieren sind, damit Du Deine Extension verbreiten kannst.

Grundlagen

Hooks

Hooks sind spezielle „Einsprungmarken“ im FluxBB code, die mit beliebigem Code aus Manifestdateien, ersetzt werden können. Ein typischer Hook sieht folgendermaßen aus:

($hook = get_hook('vf_start')) ? eval($hook) : null;

Besonderes Augenmerk sei hier auf „vf_start“ gelegt. Das ist der Name des Hooks. In diesem Fall wurde der Hook am Anfang der viewforum.php (daher das Präfix „vf_“) platziert. Wenn Du diesen Hook benutzen möchtest, musst Du Dir den Namen für die Manifestdatei merken.

Das Manifest

Alle Extensions beinhalten eine Manifestdatei, manifest.xml. Die Manifestdatei ist im Grunde genommen der Einstiegspunkt einer Erweiterung. Sie liegt in einem gewöhnlichen XML Format vor, das Informationen über die Erweiterung, wie den Namen des Autors, eine Kurzbeschreibung der Funktionen und die erforderliche FluxBB Version, enthält. 1)

Eine typische Manifest Datei sieht folgendermaßen aus:

<?xml version="1.0" encoding="UTF-8"?>
 
<extension engine="1.0">
  <id>example_extension</id>
  <title>Beispiel Erweiterung</title>
  <version>0.1</version>
  <description>Das ist eine Kurzbeschreibung</description>
  <author>Max Mustermann</author>
  <minversion>1.3 Beta</minversion>
  <maxtestedon>1.3 Beta</maxtestedon>
  <dependencies>
    <dependency>example_extension_2</dependency>
  </dependencies>
  <hooks>
    <hook id="vf_start"><![CDATA[
	// Binde 'foobar.php' aus dem Erweiterungsverzeichnis ein
	require $ext_info['path'].'/foobar.php';
    ]]></hook>
    <hook id="vf_pre_header_load"><![CDATA[
	// Rufe eine Funktion aus 'foobar.php' auf
	foobar_function();
    ]]></hook>
  </hooks>
</extension>

Nun zur Erläuterung:

<?xml version="1.0" encoding="UTF-8"?>

Das ist die grundlegende XML-Deklaration, die beschreibt, welcher XML Version das Dokument entspricht und welche Zeichenkodierung genutzt wird. Da FluxBB ab Version 1.3 volle Unterstützung für UTF-8 bietet, solltest du ebenfalls die UTF-8 Kodierung nutzen.

<extension engine="1.0">

Dieser Teil zeigt FluxBB an, für welche Extension Engine die Erweiterung entwickelt worden ist. Diese Angabe wird für den Fall benötigt, dass sich das Extension System in zukünftigen FluxBB Versionen signifikant ändert (und dadurch alte Extension unbrauchbar würden). Die aktuelle Engine Version ist 1.0.

<id>example_extension</id>

Das ist die Extension ID. FluxBB braucht diese zur Erkennung der einzelnen installierten Extensions, daher muss sie eindeutig sein. Achte darauf, dass der Erweiterungsordner gleich wie die ID lautet. Eine gute Idee wäre nur Kleinbuchstaben und den Unterstrich „_“ anstatt Leerzeichen zu verwenden. Die ID darf maximal 50 Zeichen lang sein.

<title>Beispiel Erweiterung</title>

Das ist der Titel der Erweiterung. Hier wird Deine Kreativität gefordert!

<version>0.1</version>

Die Versionsnummer der Extension. Prinzipiell kannst Du die Versionsnummern so vergeben wie Du möchtest, Du solltest allerdings auf eine logische und nachvollziehbare Versionierung achten.

<author>Max Mustermann</author>

Das ist Dein Name. Dazu benötigt es nicht viel Vorstellungskraft, oder doch?

<minversion>1.3 Beta</minversion>
<maxtestedon>1.3 Beta</maxtestedon>

Die kleinste FluxBB Version, die von Deiner Extension benötigt wird und die höchste, mit der sie erfolgreich getestet wurde. Sollte die FluxBB Version kleiner als minversion oder höher als maxtestedon sein, gibt FluxBB eine Warnung bei der Installation der Extension aus.

<dependencies>
  <dependency>example_extension_2</dependency>
</dependencies>

Sollte Deine Erweiterung eine oder mehrere andere Erweiterungen voraussetzen, kannst Du diese Abhängigkeiten hier angeben.

<hooks>
   <hook id="vf_start"><![CDATA[
	// Binde 'foobar.php' aus dem Erweiterungsverzeichnis ein
	require $ext_info['path'].'/foobar.php';
    ]]></hook>
    <hook id="vf_pre_header_load"><![CDATA[
	// Rufe eine Funktion aus 'foobar.php' auf
	foobar_function();
    ]]></hook>
</hooks>

Der Abschnitt Hooks sagt FluxBB was mit den Hooks zu machen ist. Es gibt Unterabschnitte für jeden einzelnen Hook, der von der Extension genutzt wird, gekennzeichnet durch den Hooknamen. Der PHP Code mit dem der Hook ersetzt wird, liegt in dem CDATA Bereich (umschlossen von den <![CDATA[ und ]]> Tags). Das heisst, die Hooks vf_start und vf_pre_header_load werden ersetzt durch alles, was in den dementsprechenden CDATA Bereichen angegeben ist.2)

Dieses Beispiel benutzt zwei Hooks, beide in der Datei viewforum.php.3) Der erste Hook (vf_start) inkludiert ein PHP Script aus dem Extension Verzeichnis. Wie Du siehst, hat die Extension auf die komplette Funktionalität von FluxBB, wie in diesem Fall die globale Variable FORUM_ROOT, Zugriff. Der zweite Hook ruft eine Funktion auf, welche in foobar.php definiert ist.

Extensions können FluxBB aber nicht nur um Funktionen erweitern, sondern auch eingebauten Code umgehen und stattdessen eigenen ausführen. Du kannst z.B. temporäre Variablen benutzen, den BBCode Parser damit umgehen und diesen mit einem komplett anderen Parser ersetzen.4)

Die Extension Verzeichnisstruktur

Um Deine Extension für Benutzer leicht handhabbar zu machen, muss sie in einer bestimmten Verzeichnisstruktur vorliegen. Wohlgemerkt ist die Struktur ziemlich simpel. Alles was Du brauchst, ist ein Ordner, der den gleichen Namen trägt, wie die ID in Deiner Manifestdatei. Das Manifest speicherst Du in diesem Ordner. Übersetzungsdateien kommen in einen Ordner lang und werden nach dem Schema <Sprache>.php benannt (z.B. myextension/lang/Deutsch.php). Alles andere bleibt Dir selbst überlassen.

1) Wenn XML Neuland für Dich ist, kannst Du auf W3Schools Tutorials finden.
2) Die CDATA Tags zeigen an, dass die umschlossenen Daten nicht als Markup behandelt werden.
3) Das sehen wir am Prefix „vf_“.
4) Für ein Beispiel solch eines Projekts, siehe Textile parser.
 
de/developing_extensions.txt · Zuletzt geändert: 2008/05/18 00:44 von damaxxed
 
Falls nicht anders bezeichnet ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht:CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki