ActionSearch

Package application.actions
Inheritance class ActionSearch » Action » LsObject
Since 1.0
Source Code /application/classes/actions/ActionSearch.class.php
Обработка основного поиска

Protected Properties

Hide inherited properties

PropertyTypeDescriptionDefined By
_aBehaviors Список поведений в виде готовых объектов, формируется автоматически LsObject
aBehaviors array Список поведений LsObject
aParams array Список параметров из URL Action
aParamsEventMatch array Список совпадений по регулярному выражению для евента Action
aRegisterEvent array Список зарегистрированных евентов Action
aRegisterEventExternal array Список евентов, которые нужно обрабатывать внешним обработчиком Action
sActionTemplate string|null Шаблон экшена Action
sCurrentAction null|string Текущий экшен Action
sCurrentEvent string|null Текущий евент Action
sCurrentEventName string|null Имя текущий евента Action
sDefaultEvent string|null Дефолтный евент Action

Public Methods

Hide inherited methods

MethodDescriptionDefined By
ActionCall() Позволяет запускать не публичные методы экшена через объект Action
ActionCallExists() Проверяет метод экшена на существование Action
ActionGet() Возвращает свойство объекта экшена Action
ActionSet() Устанавливает свойство объекта экшена Action
AddBehaviorHook() Добавляет хук поведения LsObject
AttachBehavior() Присоединяет поведение к объекту LsObject
DetachBehavior() Отсоединяет поведение от объекта LsObject
EventOpenSearch() Обработка стандарта для браузеров Open Search ActionSearch
EventShutdown() Выполняется при завершение экшена, после вызова основного евента Action
ExecEvent() Запускает евент на выполнение Action
GetActionClass() Получить каталог с шаблонами экшена(совпадает с именем класса) Action
GetBehavior() Возвращает объект поведения по его имени LsObject
GetBehaviors() Возвращает все объекты поведения LsObject
GetCurrentEventName() Возвращает имя евента Action
GetDefaultEvent() Получает евент по умолчанию Action
GetParam() Получает параметр из URL по его номеру, если его нет то null Action
GetParams() Получает список параметров из УРЛ Action
GetTemplate() Получить шаблон Action
Init() ActionSearch
RemoveBehaviorHook() Удаляет хук поведения LsObject
RunBehaviorHook() Запускает хук поведения на выполнение LsObject
SetDefaultEvent() Устанавливает евент по умолчанию Action
SetParam() Установить значение параметра(эмуляция параметра в URL). Action
__call() Ставим хук на вызов неизвестного метода и считаем что хотели вызвать метод какого либо модуля LsObject
__clone() При клонировании сбрасываем поведения LsObject
__construct() Конструктор Action
__get() Обработка доступа к объекты поведения LsObject

Protected Methods

Hide inherited methods

MethodDescriptionDefined By
AddEvent() Добавляет евент в экшен Action
AddEventPreg() Добавляет евент в экшен, используя регулярное выражение для евента и параметров Action
EventComments() Обработка поиска комментариев ActionSearch
EventErrorDebug() Выводит отладочную информацию в стандартном сообщении Action
EventIndex() Главная страница поиска ActionSearch
EventNotFound() Вызывается в том случаи если не найден евент который запросили через URL Action
EventTopics() Обработка поиска топиков ActionSearch
GetEventMatch() Возвращает элементы совпадения по регулярному выражению для евента Action
GetParamEventMatch() Возвращает элементы совпадения по регулярному выражению для параметров евента Action
PrepareBehaviors() Инициализация поведений LsObject
RegisterEvent() Регистрация евентов ActionSearch
RegisterEventExternal() Регистрируем внешние обработчики для евентов Action
SetTemplate() Устанавливает какой шаблон выводить Action
SetTemplateAction() Устанавливает какой шаблон выводить Action

Method Details

EventComments() method
protected void EventComments()
Source Code: /application/classes/actions/ActionSearch.class.php#122 (show)
protected function EventComments()
{
    
$this->SetTemplateAction('index');
    
$sSearchType $this->sCurrentEvent;
    
$iPage $this->GetParamEventMatch(02) ? $this->GetParamEventMatch(02) : 1;
    
/**
     * Получаем список слов для поиска
     */
    
$aWords $this->Search_GetWordsForSearch(getRequestStr('q'));
    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$iPage4'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'], $iPage4Config::Get('pagination.pages.count'),
        
Router::GetPath('search') . $sSearchType, array('q' => $sQuery));
    
/**
     * Загружаем переменные в шаблон
     */
    
$this->Viewer_Assign('aResultItems'$aResultItems);
    
$this->Viewer_Assign('aPaging'$aPaging);
    
$this->Viewer_Assign('sSearchType'$sSearchType);
    
$this->Viewer_Assign('sQuery'$sQuery);
    
$this->Viewer_Assign('aTypeCounts', array($sSearchType => $aResult['count']));
}

Обработка поиска комментариев

EventIndex() method
protected void EventIndex()
Source Code: /application/classes/actions/ActionSearch.class.php#51 (show)
protected function EventIndex()
{
    
$this->SetTemplateAction('index');
}

Главная страница поиска

EventOpenSearch() method
public void EventOpenSearch()
Source Code: /application/classes/actions/ActionSearch.class.php#59 (show)
function EventOpenSearch()
{
    
Router::SetIsShowStats(false);
    
header('Content-type: text/xml; charset=utf-8');
}

Обработка стандарта для браузеров Open Search

EventTopics() method
protected void EventTopics()
Source Code: /application/classes/actions/ActionSearch.class.php#68 (show)
protected function EventTopics()
{
    
$this->SetTemplateAction('index');
    
$sSearchType $this->sCurrentEvent;
    
$iPage $this->GetParamEventMatch(02) ? $this->GetParamEventMatch(02) : 1;
    
/**
     * Получаем список слов для поиска
     */
    
$aWords $this->Search_GetWordsForSearch(getRequestStr('q'));
    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$iPageConfig::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'], $iPageConfig::Get('module.topic.per_page'),
        
Config::Get('pagination.pages.count'), Router::GetPath('search') . $sSearchType, array('q' => $sQuery));
    
/**
     * Загружаем переменные в шаблон
     */
    
$this->Viewer_Assign('aResultItems'$aResultItems);
    
$this->Viewer_Assign('aPaging'$aPaging);
    
$this->Viewer_Assign('sSearchType'$sSearchType);
    
$this->Viewer_Assign('sQuery'$sQuery);
    
$this->Viewer_Assign('aTypeCounts', array($sSearchType => $aResult['count']));
}

Обработка поиска топиков

Init() method
public void Init()
Source Code: /application/classes/actions/ActionSearch.class.php#31 (show)
public function Init()
{
    
$this->SetDefaultEvent('index');
    
$this->Viewer_AddHtmlTitle($this->Lang_Get('search.search'));
}

RegisterEvent() method
protected void RegisterEvent()
Source Code: /application/classes/actions/ActionSearch.class.php#40 (show)
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');
}

Регистрация евентов