1
0
Fork 0
mirror of https://github.com/Oreolek/ifhub.club.git synced 2024-06-26 03:30:48 +03:00
ifhub.club/application/classes/actions/ActionSearch.class.php
Gran 9fe9ab248b Фикс поиска
Раньше находились варианты, только если запрос в нижнем регистре.
2016-04-26 13:57:41 +03:00

173 lines
6.2 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/*
* LiveStreet CMS
* Copyright © 2013 OOO "ЛС-СОФТ"
*
* ------------------------------------------------------
*
* Official site: www.livestreetcms.com
* Contact e-mail: office@livestreetcms.com
*
* GNU General Public License, version 2:
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*
* ------------------------------------------------------
*
* @link http://www.livestreetcms.com
* @copyright 2013 OOO "ЛС-СОФТ"
* @author Maxim Mzhelskiy <rus.engine@gmail.com>
*
*/
/**
* Обработка основного поиска
*
* @package application.actions
* @since 1.0
*/
class ActionSearch extends Action
{
public function Init()
{
$this->SetDefaultEvent('index');
$this->Viewer_AddHtmlTitle($this->Lang_Get('search.search'));
}
/**
* Регистрация евентов
*/
protected function RegisterEvent()
{
$this->AddEvent('index', 'EventIndex');
$this->AddEventPreg('/^topics$/i', '/^(page([1-9]\d{0,5}))?$/i', 'EventTopics');
$this->AddEventPreg('/^comments$/i', '/^(page([1-9]\d{0,5}))?$/i', 'EventComments');
$this->AddEvent('opensearch', 'EventOpenSearch');
}
/**
* Главная страница поиска
*/
protected function EventIndex()
{
$this->SetTemplateAction('index');
}
/**
* Обработка стандарта для браузеров Open Search
*/
function EventOpenSearch()
{
Router::SetIsShowStats(false);
header('Content-type: text/xml; charset=utf-8');
}
/**
* Обработка поиска топиков
*/
protected function EventTopics()
{
$this->SetTemplateAction('index');
$sSearchType = $this->sCurrentEvent;
$iPage = $this->GetParamEventMatch(0, 2) ? $this->GetParamEventMatch(0, 2) : 1;
/**
* Получаем список слов для поиска
*/
$aWords = $this->Search_GetWordsForSearch(mb_strtolower(getRequestStr('q'),"utf-8"));
if (!$aWords) {
$this->Message_AddErrorSingle($this->Lang_Get('search.alerts.query_incorrect'));
return;
}
$sQuery = join(' ', $aWords);
/**
* Формируем регулярное выражение для поиска
*/
$sRegexp = $this->Search_GetRegexpForWords($aWords);
/**
* Выполняем поиск
*/
$aResult = $this->Search_SearchTopics($sRegexp, $iPage, Config::Get('module.topic.per_page'));
$aResultItems = $aResult['collection'];
/**
* Конфигурируем парсер jevix
*/
$this->Text_LoadJevixConfig('search');
/**
* Делаем сниппеты
*/
foreach ($aResultItems AS $oItem) {
/**
* Т.к. текст в сниппетах небольшой, то можно прогнать через парсер
*/
$oItem->setTextShort($this->Text_JevixParser($this->Search_BuildExcerpts($oItem->getText(), $aWords)));
}
/**
* Формируем постраничность
*/
$aPaging = $this->Viewer_MakePaging($aResult['count'], $iPage, Config::Get('module.topic.per_page'),
Config::Get('pagination.pages.count'), Router::GetPath('search') . $sSearchType, array('q' => $sQuery));
/**
* Загружаем переменные в шаблон
*/
$this->Viewer_Assign('resultItems', $aResultItems);
$this->Viewer_Assign('paging', $aPaging);
$this->Viewer_Assign('searchType', $sSearchType);
$this->Viewer_Assign('query', $sQuery);
$this->Viewer_Assign('typeCounts', array($sSearchType => $aResult['count']));
}
/**
* Обработка поиска комментариев
*/
protected function EventComments()
{
$this->SetTemplateAction('index');
$sSearchType = $this->sCurrentEvent;
$iPage = $this->GetParamEventMatch(0, 2) ? $this->GetParamEventMatch(0, 2) : 1;
/**
* Получаем список слов для поиска
*/
$aWords = $this->Search_GetWordsForSearch(mb_strtolower(getRequestStr('q'),"utf-8"));
if (!$aWords) {
$this->Message_AddErrorSingle($this->Lang_Get('search.alerts.query_incorrect'));
return;
}
$sQuery = join(' ', $aWords);
/**
* Формируем регулярное выражение для поиска
*/
$sRegexp = $this->Search_GetRegexpForWords($aWords);
/**
* Выполняем поиск
*/
$aResult = $this->Search_SearchComments($sRegexp, $iPage, 4, 'topic');
$aResultItems = $aResult['collection'];
/**
* Конфигурируем парсер jevix
*/
$this->Text_LoadJevixConfig('search');
/**
* Делаем сниппеты
*/
foreach ($aResultItems AS $oItem) {
/**
* Т.к. текст в сниппетах небольшой, то можно прогнать через парсер
*/
$oItem->setText($this->Text_JevixParser($this->Search_BuildExcerpts($oItem->getText(), $aWords)));
}
/**
* Формируем постраничность
*/
$aPaging = $this->Viewer_MakePaging($aResult['count'], $iPage, 4, Config::Get('pagination.pages.count'),
Router::GetPath('search') . $sSearchType, array('q' => $sQuery));
/**
* Загружаем переменные в шаблон
*/
$this->Viewer_Assign('resultItems', $aResultItems);
$this->Viewer_Assign('paging', $aPaging);
$this->Viewer_Assign('searchType', $sSearchType);
$this->Viewer_Assign('query', $sQuery);
$this->Viewer_Assign('typeCounts', array($sSearchType => $aResult['count']));
}
}