41.2 Plug-ins für den Inhalt 

Die Aufgabe und Funktion unseres Plug-ins, das wir »HotLink« nennen wollen, ist es zum einen, eine einfache Funktion für interne Links zur Verfügung zu stellen, und zum anderen, alle externen Links im Inhalt mit einem Symbol als solche kenntlich zu machen. Dieses Symbol soll über einen Parameter auswählbar sein.
Sehen wir uns zunächst einmal die XML-Datei an:
1 <?xml version="1.0" encoding="utf-8"?> 2 <install type="plugin" group="content" version="1.5"> 3 <name>HotLink</name> 4 <author>Markus</author> 5 <creationDate>September 2008</creationDate> 6 <copyright>(C) 2008 Markus</copyright> 7 <license>GNU GPL</license> 8 <version>0.1</version> 9 <description>Links im Content</description> 10 <files> 11 <filename plugin="hotlink">hotlink.php</filename> 12 </files> 13 <params> 16 <param name="image" type="imagelist" 15 label="Symbol" default="globe3.png" 16 directory="/includes/js/ThemeOffice" 17 hide_none="1" hide_default="1" 19 description="Icon für externe Links" /> 20 </params> 21 </install>
Listing 41.2 hotlink.xml
In Zeile 2 ist angegeben, dass es sich um einen Plug-in der Gruppe content handelt. Nach einigen Meta-Informationen (Zeilen 3–9) werden die Dateien angegeben, die zum Plug-in gehören (Zeilen 10 –14). In unserem Fall ist das nur die Datei hotlink.php. Danach wird der einzige Parameter eingeführt, der ein Bildauswahlfeld darstellt, wie wir es schon aus dem Modul kennen.
Im eigentlichen Plug-in werden wir uns zunächst der Erstellung interner Links widmen. Diese sollen im Text nach dem Schema
{hotlink=id text=linktext}
eingefügt werden können und müssen in die URL index.php?option=com_content&view=article&id=ID umgesetzt werden.
Um ein Plug-in einsetzen zu können, muss dieses zunächst registriert werden. Wie oben schon gesagt wurde, reagieren Plug-ins auf verschiedene Ereignisse. Die eigentliche Funktionalität wird in eine Methode verpackt. Die Registrierung dieser Methode für den Event wird von Joomla! selbst vorgenommen.
1 <?php 2 defined( '_JEXEC' ) or die( 'Restricted Access'); 3 jimport('joomla.plugin.plugin'); 4 5 class plgContentHotlink extends JPlugin { 6 function plgContentHotlink( &$subject, $config ) { 7 parent::__construct( $subject, $config ); 8 } 9 function onPrepareContent( &$article, &$params, $start) { 10 $regex = "/{hotlink=([^\s]*)\s*text=([^\s]*)}/s"; 11 $repl = '<a href="index.php?' 13 .'option=com_content&view=article&id=$1">' 14 .'$2</a>'; 15 $article->text = preg_replace($regex, $repl, 16 $article->text); 17 } 18 } 19 ?>
Listing 41.3 hotlink.php
Die Zeile 2 verhindert wieder, dass das Skript ohne den Kontext von Joomla! aufgerufen wird. Danach wird die Plug-in-Basisklasse importiert (Zeile 3). In Zeile 5 wird das Hotlink-Plug-in von JPlugin abgeleitet, und anschließend wird der Konstruktor an die Basisklasse weitergegeben (Zeile 6 –8). Nun wird die Methode onPrepareContent definiert, die drei Argumente entgegennimmt. Für unsere Zwecke ist $article interessant, hier wird in der Eigenschaft text die Ausgabe des Beitrags hinterlegt, und wir können sie modifizieren.
In Zeile 10 wird ein regulärer Ausdruck definiert, der nach Mustern sucht, die mit {hotlink beginnen. Wichtig ist, dass die runden Klammern so gesetzt sind, dass sie genau die uns interessierende Information, nämlich die ID und die Beschriftung des Links, umschließen. In den Zeilen 11–14 wird der Link definiert, der den Plug-in-Befehl ersetzen soll. Beachten Sie, dass mit $1 (Zeile 13) und $2 (Zeile 14) auf den Inhalt der oben genannten Klammern zugegriffen wird. Nach diesen Vorbereitungen müssen wir nur noch in Zeile 15 und 16 die gerade vorbereitete Ersetzung vornehmen.
Um das Plug-in zu installieren, gehen Sie genauso vor, wie wir es in Abschnitt 9.4, »Neue Erweiterungen installieren«, bereits besprochen hatten. Damit werden die Dateien, die im <files>-Tag der XML-Datei angegeben sind, in das Gruppenverzeichnis unter joomla/plugins kopiert (in unserem Fall joomla/plugins/content), und es wird ein Eintrag in der Datenbank angelegt. Vergessen Sie nicht, unser Programm im Plug-in-Manager zu publizieren. Jetzt können Sie es bereits testen. Die weiteren Veränderungen im Programmcode können Sie zu Testzwecken direkt in der Datei joomla/plugins/content/hotlink.php vornehmen. Wenn Sie die Dateien jedoch neu benennen, müssen sie auch neu installiert werden.
Die zweite Aufgabe, die wir uns gestellt hatten, soll an jeden externen Link ein Symbol anhängen. Das geht im Prinzip wie oben: Wir brauchen ein Erkennungsmuster für externe Links und eine Ersetzung. Der Code wird in der Methode nach den bereits existierenden Befehlen eingefügt.
9 function onPrepareContent( &$article, &$params, $start) { ... 17 $image = $this->params->get('image', 'globe3.png'); 18 $regex="/(<a\shref=(\"|')http:\/\/[^>]*>([^<]*))" 19 ."</a>/s"; 20 $repl = '$1<img src="includes/js/ThemeOffice/' 21 .$image.'" border="0"></a>'; 22 $article->text = preg_replace( $regex, $repl, 23 $article->text ); 24 }
Listing 41.4 Ausschnitt aus hotlink.php
Die Parameter für das Plug-in werden von Joomla! beim Instanziieren des Objekts in die Variable $params geschrieben. Diese muss über die Selbstreferenz $this angesprochen werden. Ansonsten funktioniert die Abfrage der Parameter genauso, wie Sie das schon von den Modulen her kennen. Wir holen zunächst den Wert des Parameters image in die Variable $image. Dann definieren wir ein Suchmuster, das alle Zeichenfolgen findet, die mit <a href="http:// beginnen und mit </a> enden. Das Suchmuster hat eine runde Klammer, die genau bis zum </a>-Tag reicht. Das heißt, im Ersetzungsmuster in Zeile 20/21 können wir diesen Bereich mit $1 ansprechen und übernehmen. Dahinter geben wir das Bild aus und danach erst das neue </a>-Tag. Die Ersetzung findet dann in den Zeilen 22 und 23 statt.