Joomla! Komponente durchsuchbar machen
Hier wird erklärt, wie man ein Such-Plugin für eine Joomla!-Komponente schreibt. Man benötigt dazu eine PHP-Klasse und eine XML-Datei für die Installation des Plugins.
Man kennt das: Man lädt sich eine Joomla! Komponente herunter installiert sie und merkt schließlich, dass das Ding richtig geil ist - aber eben nicht durchsuchbar. D. h., dass der Output, der von dieser Komponente gemacht wird nicht in den Suchergebnissen der Seite auftaucht. Gerade bei Komponenten, die sich speziell auf den Content beziehen, wie z. B. der Komponente Jootags, die es ermöglicht zu Beiträgen passende Tags zu hinterlegen, wäre es natürlich von Vorteil, wenn man deren Ausgabe auch in der Suche finden würde. Das geht. Es bietet sich an vor dem Weiterlesen erst mal diesen Beitrag anzusehen. Ist aber nicht zwingend erforderlich. Suchrobot programmieren... ist die Lösung. Aber keine Angst, das klingt komplizierter, als es wirklich ist. Tatsächlich benötigt man nur zwei Dateien. Eine PHP-Datei, die die eigentliche (Such)Arbeit übernimmt und eine XML-Datei für die Installation. Ein Suchrobot in Joomla! ist immer ein Plugin, welches man sich installieren muss. Am Beispiel der Komponente Jootags sieht das folgendermaßen aus: PHP-Datei
<?php
defined( '_JEXEC' ) or die( 'Restricted access' );
jimport( 'joomla.plugin.plugin' );
class plgSearchJootagssrch extends JPlugin
{
function plgSearchJootagssrch( &$subject, $config)
{
parent::__construct($subject, $config);
}
function onSearchAreas()
{
static $areas = array( 'jootagssrch' => 'Tag' );
return $areas;
}
function onSearch($text, $phr='', $order='', $areas=null)
{
$db =& JFactory::getDBO();
$text = trim( $text );
if ($text == '') { return array(); }
$query = "SELECT con.title AS title,\n"
." con.created AS created,\n"
." con.introtext AS text,\n"
." CONCAT( 'index.php?option=com_content&view=article&id=', con.id ) AS href, '2' AS browsernav\n"
." FROM #__content AS con\n"
."INNER JOIN #__jootags_tag_items AS item ON item.item_id = con.id\n"
."INNER JOIN #__jootags_tags AS tag ON tag.id = item.tag_id\n"
." WHERE tag.title = '$text'\n"
." ORDER BY con.title\n";
$db->setQuery( $query );
return $db->loadObjectList();
}
}
?>
Weil das Ganze eine Klasse ist, brauchen wir einen Konstruktor. Dieser wird in den Zeilen 8-11 erstellt. Alles, was er macht, ist den Konstruktor der Mutterklasse aufzurufen. In den Zeilen 14-18 wird die Methode onSearchAreas() erstellt. Damit wird ein neuer Suchraum eröffnet. Dadurch hat der User später die Möglichkeit nur in einem bestimmten Suchraum zu suchen (Standardmäßig sind das z. B. Beiträge, Newsfeeds, Kategorien...). Der User soll auch speziell nur in unserer Komponente suchen können. Er soll z. B. auswählen können, dass er nur nach Tags mit "Joomla!" suchen will:
Wenn der User in das Suchfeld einen Begriff eingibt und danach sucht, wird im Plugin die Methode onSearch() ausgelöst (Zeilen 21-39). Hier holt man sich zuerst in Zeile 23 das Datenbankobjekt. Mit der PHP-Funktion trim() werden Leerzeichen am Anfang und am Ende des Suchbegriffes entfernt (Zeile 24). Das Herzstück des Such-Plugins ist der SQL-Query, welcher in Zeile 27 definiert wird. Er holt folgende Daten aus der Datenbank: - Beitragstitel
- Erstellungsdatum
- Introtext
- Link zum Beitrag (Zeile 30)
Erwähnenswert hier ist noch, dass man sich natürlich die Tabellen von der jeweils zu durchsuchenden Tabelle joinen muss (Zeilen 32+33). Bei der Komponente Jootags ist das zum Einen die Tabelle #__jootags_tag_items. Sie speichert die ID des eines Tags und dazu die ID des dazu gehörenden Beitrags. Zum Anderen benötigen wir hier noch die Tabelle #__jootags_tags. Sie speichert die einzelnen Tags. In den Zeilen 37 und 38 wird schließlich, mit Hilfe des Datenbankobjekts, der SQL-Query ausgeführt. XML-DateiNun benötigen wir nur noch die XML-Datei für die Installation des Plugins:
<?xml version="1.0" encoding="utf-8"?>
<install type="plugin" group="search" version="1.5">
<name>Jootags Searchbot</name>
<files>
<filename plugin="jootagssrch">jootagssrch.php</filename>
</files>
<params />
</install>
Entscheidend ist hier die Zeile 2. Hier wird definiert, dass dieses Plugin für die Suche bestimmt ist und dass es für die Joomla!-Version 1.5 geschrieben wurde. Außerdem muss man noch die entsprechende PHP-Datei angeben (Zeile 5). Zum Schluss.. erstellt man aus beiden Dateien eine ZIP-Datei und installiert sie wie gewohnt über den Administrationsbereich von Joomla! Anschließend muss das Plugin noch aktiviert werden. Fertig.
|
Kommentare