Описание
Этот документ о том, как создать плагин поиска. Вы можете использовать поиск Плагин для поиска в базе данных вашего Joomla! сайт. Чтобы создать плагин, вы по крайней мере, необходимо два файла; файл XML и файл PHP. Для интернационализации это хорошо для создания файла INI, а также.
XML-файл
XML-файл называется так же, как файл PHP, и является одним из двух необходимых файлов. Всегда начинать с теги XML и определить, что она написана в UTF-8 формате.
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE install PUBLIC
"-//Joomla! 1.5//DTD plugin 1.0//EN" "http://www.joomla.org/xml/dtd/1.5/plugin-install.dtd">
Чтобы определить, что плагин должен быть поисковый плагин, добавить следующую строку:
<install version="1.5" type="plugin" group="search">
Типа будет определять это плагин, группа определяет плагин находится в группе поисковых плагинов.
После этого, добавьте информацию о себе и плагин:
<name>Название Вашей поисковый плагин</name>
<creationDate>Дата создания</creationDate>
<author>Ваше имя</author>
<authorEmail>Ваш адрес электронной почты</authorEmail>
<authorUrl>Ваш веб-сайт</authorUrl>
<copyright>Информация об авторских правах</copyright>
<license>Лицензии, например GNU/GPL</license>
<version>Версия плагина</version>
<description>Описание плагина; показывается во время установки и при редактировании
Плагин в Plugin Manager</description>
И сейчас, включить ваш PHP файл плагина поиск. Имя этого файла должно быть таким же, как имя этого файла XML. Положите это название также за плагин = "" часть.
Вы также можете добавлять новые файлы для вашего плагина, например, изображения. Просто добавьте еще одну строку между <files> и </ files>, а затем поместите файл между тегами <filename>.
<files>
<filename plugin="nameofplugin">nameofplugin.php</filename>
</files>
Для интернационализации, мы будем использовать языковые файлы. Это не обязательно, но люди из других стран будут любить это они могут легко переводить ваш плагин на их родном языке. Языка тегов можно найти здесь: [1] (использование ISO 639-1 колонка) и здесь: [2]
<languages>
<language tag="en-GB">language/en-GB/en-GB.plg_search_nameofplugin.ini</language>
</languages>
По желанию, можно добавить некоторые параметры плагина. Они будут выглядеть следующим образом:
<params>
<param name="paramname" type="typeofparameter" default="defaultsetting" label="title" description="description"/>
</params>
- Param name: имя параметра. Вы будете нуждаться в этом при создании файла PHP.
- Param type: Вы можете выбрать один из нескольких типов параметров. Посмотрите на этот документ, чтобы узнать что-то о разных типов: [3]
- Param default: по умолчанию для этого параметра.
- Param label: Название этого параметра отображается в экран редактирования этого плагина в менеджер плагинов.
- Param description: текст, который появляется в качестве подсказки для этого параметра.
Не забудьте положить конец вашей XML-файл со следующим тегом:
</install>
PHP файлов
PHP файл вашего плагина является наиболее важным файл плагина. Это пример PHP файл поисковый плагин. Комментарии включены.
<?php
//Первый запуск с информацией о плагине и самому себе. Например:
/**
* @version $Id: nameofplugin.php versionnumber date author
* @copyright Copyright
* @license License, for example GNU/GPL
* All other information you would like to add
*/
//Для предотвращения доступа к документу непосредственно, введите этот код:
// не имеет прямого доступа
defined( '_JEXEC' ) or die( 'Restricted access' );
//Определить registerEvent и языковой файл. Заменить "nameofplugin" с именем вашего плагина.
$mainframe->registerEvent( 'onSearch', 'plgSearchnameofplugin' );
$mainframe->registerEvent( 'onSearchAreas', 'plgSearchnameofpluginAreas' );
JPlugin::loadLanguage( 'plg_search_nameofplugin' );
//Определить функции возвращать массив поиска областях. Заменить "nameofplugin" с именем вашего плагина.
function &plgSearchnameofpluginAreas()
{
static $areas = array(
'nameofplugin' => 'Nameofplugin'
);
return $areas;
}
//Вещественная функция должна быть создана. Подключение к базе данных должны быть сделаны.
//Функция будет закрыто с} в конце файла.
function plgSearchnameofplugin( $text, $phrase='', $ordering='', $areas=null )
{
$db =& JFactory::getDBO();
$user =& JFactory::getUser();
//Если массив не правильно, вернуть его:
if (is_array( $areas )) {
if (!array_intersect( $areas, array_keys( plgSearchnameofpluginAreas() ) )) {
return array();
}
}
//Определить параметры. Сначала получите право плагин; 'search' (the group), 'nameofplugin'.
$plugin =& JPluginHelper::getPlugin('search', 'nameofplugin');
//Тогда нагрузка параметров плагина.
$pluginParams = new JParameter( $plugin->params );
//Теперь определим параметры следующим образом:
$limit = $pluginParams->def( 'nameofparameter', defaultsetting );
//Используйте функцию обрезки для удаления пробелов перед или в задней части поиска терминов
$text = trim( $text );
//
if ($text == '') {
return array();
}
/ / После этого вы должны добавить базу данных части. Это будет самая трудная часть, потому что это изменение в ситуации.
/ / В примеры кодирования позже вы найдете некоторые из примеров используется Joomla! 1,5 основных поисковых плагинов.
/ / Это будет выглядеть примерно так.
$wheres = array();
switch ($phrase) {
//Поиск точного
case 'exact':
$text = $db->Quote( '%'.$db->getEscaped( $text, true ).'%', false );
$wheres2 = array();
$wheres2[] = 'LOWER(a.name) LIKE '.$text;
$where = '(' . implode( ') OR (', $wheres2 ) . ')';
break;
//поиск всех или
case 'all':
case 'any':
//Установить по умолчанию
default:
$words = explode( ' ', $text );
$wheres = array();
foreach ($words as $word)
{
$word = $db->Quote( '%'.$db->getEscaped( $word, true ).'%', false );
$wheres2 = array();
$wheres2[] = 'LOWER(a.name) LIKE '.$word;
$wheres[] = implode( ' OR ', $wheres2 );
}
$where = '(' . implode( ($phrase == 'all' ? ') AND (' : ') OR ('), $wheres ) . ')';
break;
}
//упорядочение результатов
switch ( $ordering ) {
//алфавитный, по возрастанию
case 'alpha':
$order = 'a.name ASC';
break;
//сначала старые
case 'oldest':
//популярные первый
case 'popular':
//Сначала новые
case 'newest':
//Значение по умолчанию: алфавитный, по возрастанию
default:
$order = 'a.name ASC';
}
//заменить nameofplugin
$searchNameofplugin = JText::_( 'Nameofplugin' );
//запрос к базе данных, отличается в ситуации! Это будет выглядеть примерно так:
$query = 'SELECT a.name AS title,'
. ' CONCAT_WS( " / ", '. $db->Quote($searchNameofplugin) .', b.title )AS section,'
. ' "1" AS browsernav'
. ' FROM #__nameofplugin AS a'
. ' INNER JOIN #__categories AS b ON b.id = a.catid'
. ' WHERE ( '. $where .' )'
. ' AND a.published = 1'
. ' AND b.access <= '. (int) $user->get( 'aid' )
. ' ORDER BY '. $order
;
//Установить запроса
$db->setQuery( $query, 0, $limit );
$rows = $db->loadObjectList();
//"Выход" из отображается ссылка
foreach($rows as $key => $row) {
$rows[$key]->href = 'index.php?option=com_newsfeeds&view=newsfeed&catid='.$row->catslug.'&id='.$row->slug;
}
//Вернуться результаты поиска в массиве
return $rows;
}
Есть четыре переменные, которые получают прошло дюйма Они очевидны их имена и использование в коде выше. Что не очевидно то, что функция должна вернуть: массив объектов, что инструментом поиска используется для отображения результатов. Результаты могут альтернативно были собраны как это.
$rows[] = (object) array(
'href' => 'index.php?option=com_newsfeeds&view=newsfeed&catid='.$row->catslug.'&id='.$row->slug,
'title' => $row['name'],
'section' => $searchnameofplugin,
'created' => $row['date'],
'text' => $row['name'],
'browsernav' => '1'
);
INI-файл (ы)
Для интернационализации это хорошо использовать INI-файлы. Вы можете добавить все, чтобы языковой файл, который выводит текст для пользователей, в следующем порядке:
* XML-описания тега
* Этикетки XML и описание атрибутов параметров
* JText:: _ ('строка') используется плагин
Начните INI-файл с чем-то вроде этого:
# $Id: en-GB.plg_search_nameofplugin.ini
# Joomla! Project
# Copyright (C) 2005 - 2007 Open Source Matters. All rights reserved.
# License http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL, see LICENSE.php
# Note : All ini files need to be saved as UTF-8 - No BOM
Конечно, вы также можете добавить другую информацию, как и автор.
Например, этот параметр:
<param name="search_limit" type="text" size="5" default="50" label="Search Limit"
description="Number of Search items to return"/>
Вызовет следующий вывод в файл INI:
SEARCH LIMIT=Search Limit
NUMBER OF SEARCH ITEMS TO RETURN=Количество поисковых элементов, чтобы вернуться
Файл выглядит повторяющиеся, но будет очень полезным для переводчиков.
Если вы хотите, чтобы ваш поисковый плагин доступна на нескольких языках, сначала добавить их в <languages> тег в файл XML. Затем создайте же файл INI, и изменить часть после =, например, голландская версия будет:
SEARCH LIMIT=Zoek limiet
NUMBER OF SEARCH ITEMS TO RETURN=Aantal weer te geven zoekresultaten
Примеры кодирования
Есть шесть Joomla! Плагины Core поиска. Если вы посмотрите на них вы можете узнать много нового, особенно о запросе части. Вы можете увидеть их "working", когда вы идете в фоновом вашего Joomla! 1,5 установки. К "Extensions" меню и выберите "Plugin Manager. Нажмите на имя плагина, чтобы изменить его и увидеть его работы.
- Plugin Search - Categories
- \plugins\search\categories.XML
- \plugins\search\categories.PHP
- \language\en-GB\en-GB.plg_search_categories.INI
- Plugin Search - Contacts
- \plugins\search\contacts.XML
- \plugins\search\contacts.PHP
- \language\en-GB\en-GB.plg_search_contacts.INI
- Plugin Search - Content
- \plugins\search\content.XML
- \plugins\search\content.PHP
- \language\en-GB\en-GB.plg_search_content.INI
- Plugin Search - Newsfeeds
- \plugins\search\newsfeeds.XML
- \plugins\search\newsfeeds.PHP
- \language\en-GB\en-GB.plg_search_newsfeeds.INI
- Plugin Search - Sections
- \plugins\search\sections.XML
- \plugins\search\sections.PHP
- \language\en-GB\en-GB.plg_search_sections.INI
- Plugin Search - Weblinks
- \plugins\search\weblinks.XML
- \plugins\search\weblinks.PHP
- \language\en-GB\en-GB.plg_search_weblinks.INI
Советы
* В файле PHP, люди часто забывают поставить точку с запятой (;) в конце линии. Это приводит к ошибкам. Проверьте это перед протестировать плагин.
* Убедитесь, что параметры в файле XML правильно закрыты. При добавлении опции, например, необходимо, чтобы закрыть его с </param>.
* Это легко проверить на локальный при редактировании вашего плагина.
* При создании ZIP-файл, не забудьте сделать каталоги для языковых файлов. Типичные ZIP будет содержать следующее:
- nameofplugin.XML
- nameofplugin.PHP
- language\en-GB\en-GB.plg_search_nameofplugin.INI
