Обновление поста по поиску по отдельным категориям для старой старой версии 1.0
Стандартный поиск по отдельным категориям, !Joomla 1.0.xx представляю черновую версию аналогичного поиска для движка 2.5.
Цель - в форме стандартного поиска получить список категорий контента для поиска по отдельным категориям. Работает только для категорий контента, не других расширений (даже стандартных, кто желает - модификации запроса на свое усмотрение)
Выглядеть в итоге (на стандартном шаблоне) должно примерно так:
Шаг 1
\components\com_search\views\search\tmpl\default_form.php
после строки примерно 58 (где phrases) добавляем
блок поиска по категориям
1
23
45
67
89
1011
1213
1415
1617
1819
20 | // By Beliyadm добавляем список категорий
$htmlcat = '';$htmlcat .= '<fieldset class="only"><label for="catid">Искать в категории:</label>';
$db =& JFactory::getDBO();
$sql = 'select id, title from #__categories where extension = "com_content" and published = 1 ';$db->setQuery($sql);
$rows = $db->loadObjectList();
$htmlcat .= '<select size="1" name="catid" id=""catid">';$catsel = '';
$htmlcat .= '<option class="catid" value="0">Все категории</option>';foreach ($rows as $row) {
if ($row->id == $this->catid) { $catsel = ' selected="selected" ';
} else {$catsel = '';} $htmlcat .= '<option class="catid" value="'.$row->id.'" '.$catsel.'>'.$row->title.'</option>';
}$htmlcat .= '</select></fieldset>';
echo $htmlcat; |
## Можно пользоваться стандартным API движка, но сути не меняет, это тот же запрос к базе на выборку категорий, только здесь мы можем настроить запрос под наши требования
Шаг 2
\plugins\search\content\content.php
функция onContentSearch (строка 41)
меняем на
1
| function onContentSearch($text, $phrase='', $ordering='', $areas=null, $catid) |
После $wheres = array(); добавляем
1
23
45
| // By Beliyadm добавляем список категорий
$wherescatid = '';if ($catid != 0) {
$wherescatid = ' AND a.catid = "'.$catid.'" ';} |
Ниже находим строку примерно 165
1
| $query->where('('. $where .')' . 'AND a.state=1 AND c.published = 1 AND a.access IN ('.$groups.') ' |
и меняем ее на
1
| $query->where('('. $where .')' . 'AND a.state=1 AND c.published = 1 '.$wherescatid.' AND a.access IN ('.$groups.') ' |
## конечно, можно и может даже лучше пихать категорию в общий массив where, но мне так проще впоследствии разбираться что где я менял
Шаг 3
\components\com_search\controller.php
В функцию function search() добавляем (по аналогии с другими элементами массива)
1
| $post['catid'] = JRequest::getUInt('catid', null, 'post'); |
Шаг 4
\components\com_search\models\search.php
В функции function getData() меняем весь блок $results на
1
23
45
67
| $results = $dispatcher->trigger('onContentSearch', array(
$this->getState('keyword'), $this->getState('match'),
$this->getState('ordering'), $areas['active'],
$this->getState('catid'))); |
Шаг 5
\components\com_search\views\search\view.html.php
В функции function display после
1
| $searchword = $state->get('keyword'); |
добавляем
1
| $catid = $state->get('catid'); |
На этом все.
С учетом того, что мы работали только с категориями контента - нужно отключить плагины поиска по другим компонентам либо дописывать условия в запрос.
На всякий случай прикладываю измененные файлы версии 2.5.7
скачать архив. В архиве две папки, содержимое com_search залить в components\com_search, содержимое plg_search_content в каталог plugins\search\content (
не забываем про резервные копии!!!!!).
Если у вас на уровне шаблона переопределяется вывод формы поиска, значит обновление шага 1 применять к файлу \templates\ваш_шаблон\html\com_search\search\default_form.php
Комментарии