15.4 Plugins
Zum guten Schluss wollen wir die Komponente noch in die allgemeine Suche von Joomla! integrieren. Um die Tabelle durchsuchbar zu machen, benötigen Sie ein Plugin vom Typ search. In diesem Fall hat nicht jedes Plugin ein Unterverzeichnis, sondern jeder Plugin-Typ. Wir arbeiten daher im Verzeichnis [PfadzuJoomla]/ plugins/search. Für ein Plugin benötigen Sie mindestens eine php-Datei mit der Logik (siehe Listing 15.26) und die xml-Datei mit der Beschreibung. Die Namen sollten Sie in diesem Fall von der Komponente ableiten. Also auto.php und auto.xml. Wenn Sie beispielsweise ein User-Plugin schreiben, werden Sie sich beim Namen nach der Funktion des Plugins richten, in unserem Fall besteht ein konkreter Bezug zur com_auto-Komponente. Auch die Plugins müssen in einer Tabelle angemeldet werden, in diesem Fall in der Tabelle jos_plugins. Das übernimmt natürlich der Installer für Sie. Die Suche ist sehr ausführlich und kann mit verschiedensten Parametern versehen werden. Der Quellcode gibt einen Eindruck von den Möglichkeiten. Da unsere Komponente nicht vermerkt, wann ein Auto eingefügt wurde oder wie viele Zugriffe ein Auto hat (wir haben ja noch keine Auto-Detailseite), bleiben hier viele Möglichkeiten der erweiterten Suche ungenutzt.
<?php
defined('_JEXEC')
or die( 'Restricted access' );
$mainframe->registerEvent('onSearch',
'plgSearchAuto');
$mainframe->registerEvent('onSearchAreas',
'plgSearchAutoAreas');
function &plgSearchAutoAreas() {
static $areas = array('auto' => 'Auto');
return $areas;
}
function plgSearchAuto( $text, $phrase='',
$ordering='', $areas=null ){
$db =& JFactory::getDBO();
$user =& JFactory::getUser();
if (is_array( $areas )) {
if (!array_intersect( $areas,
array_keys( plgSearchAutoAreas() ) )) {
return
array();
}
}
$plugin =& JPluginHelper::getPlugin('search', 'auto');
$pluginParams = new JParameter( $plugin->params );
$limit = $pluginParams->def( 'search_limit', 50 );
$text = trim( $text );
if ($text == '') {
return array();
}
$section = JText::_( 'Auto' );
$wheres = array();
switch ($phrase){
case 'exact':
$text = $db->getEscaped($text);
$wheres2 = array();
$wheres2[]= "LOWER(a.text)
LIKE '%$text%'";
$wheres2[]= "LOWER(a.hersteller)
LIKE '%$text%'";
$where = '(' . implode( ')
OR (', $wheres2 ) . ')';
break;
case 'all':
case 'any':
default:
$words = explode( ' ', $text );
$wheres = array();
foreach ($words as $word) {
$word = $db->getEscaped($word);
$wheres2 = array();
$wheres2[] = "LOWER(a.text)
LIKE '%$word%'";
$wheres2[] = "LOWER(a.hersteller)
LIKE '%$word%'";
$wheres[] = implode( ' OR ', $wheres2 );
}
$where= '('.implode(($phrase == 'all'
? ') AND ('
: ') OR ('), $wheres ) . ')';
break;
}
switch ( $ordering ) {
default:
$order = 'a.text ASC';
break;
}
$query = "SELECT * FROM #__auto AS a"
."\n WHERE ( $where )"
."\n AND published = '1'"
."\n ORDER BY $order";
$db->setQuery( $query, 0, $limit );
$rows = $db->loadObjectList();
foreach($rows as $key => $row) {
$rows[$key]->href = 'index.php?option=com_auto&view=auto';
}
return $rows;
}
?>
Listing 15.26: auto.php
Die auto.xml-Datei enthält wieder die beschreibenden Daten über das Plugin für den Installer und sieht aus wie in Listing 15.27.
<?xml version="1.0" encoding="utf-8"?>
<install version="1.5" type="plugin" group="search">
<name>Search - Auto</name>
<author>Hagen Graf</author>
<creationDate>November 2007</creationDate>
<copyright>(C) 2007 cocoate.com. All rights reserved.</copyright>
<license>GNU/GPL</license>
<authorEmail>hagen.graf@gmail.com</authorEmail>
<authorUrl>www.cocoate.com</authorUrl>
<version>0.1</version>
<description>Such Plugin fuer die Auto Komponente</description>
<files>
<filename plugin="auto">auto.php</filename>
</files>
</install>
Listing 15.27: auto.xml
Wenn Sie nun das Plugin installieren und im Menü Erweiterungen - Plugins aktivieren, ist Ihre Autoliste über das Suchfeld auf der Website durchsuchbar. Nach Eingabe eines Suchbegriffs werden die Felder text und hersteller in der Datenbank durchsucht und die Ergebnisse in der allgemeinen Suchmaske angezeigt (Abbildung 15.18).

Abbildung 15.18: Das search-Plugin Auto im Einsatz
Das search-Plugin ist bewusst einfach gehalten. An der Fundstelle in den Suchergebnissen sollte natürlich ein Link zur Einzelansicht des Listenelementes platziert werden, damit der Suchende dorthin weiterklicken kann. Da wir aber in unserer Komponente keine Einzelansicht vorgesehen haben, können wir hier natürlich keinen Link angeben.
| Anhang | Größe |
|---|---|
| plu_auto.zip | 1.43 KB |
- 11145 Aufrufe
French
Paris, France
Neueste Kommentare
vor 6 Tage 5 Minuten
vor 6 Tage 38 Minuten
vor 6 Tage 3 Stunden
vor 6 Tage 11 Stunden
vor 6 Tage 19 Stunden
vor 1 Woche 10 Stunden
vor 1 Woche 10 Stunden
vor 1 Woche 10 Stunden
vor 4 Wochen 2 Tage
vor 5 Wochen 4 Tage