Нужны события в php файлах, часть 2:
1. В файле
search.php есть событие
search_modify_param_before
перед созданием sql запроса и его параметров для предопределённых вариантов поиска
active_topics, unanswered, unreadposts, newposts
,
egosearch
, нужно событие после этого.
Добавить
Код: Выделить всё
$vars = array('sql', 'search_id', 'show_results', 'l_search_title');
extract($phpbb_dispatcher->trigger_event('core.search_modify_param_after', compact($vars)));
перед
Код: Выделить всё
// show_results should not change after this
все параметры, которые участвуют в поиске, передаются по ссылке (например при постраничной навигации), если я использую свои параметры, их так же нужно передавать по ссылке, события для этого нет.
Добавить
Код: Выделить всё
$vars = array('u_search');
extract($phpbb_dispatcher->trigger_event('core.search_modify_search_link', compact($vars)));
после
Код: Выделить всё
$u_search .= ($return_chars != 300) ? '&ch=' . $return_chars : '';
2. В файлах
/phpbb/search/fulltext_mysql.php, /phpbb/search/fulltext_native.php, /phpbb/search/fulltext_postgres.php в функциях
keyword_search, author_search
при поиске используется кеширование, в переменную
$search_key
сохраняется md5 сумма всех параметров поиска, если я использую свои параметры, форум будет выдавать результат только по тем параметрам, которые там были учтены, т.е. мой поиск не будет иметь никакого эффекта, нужно добавить возможность определять свои параметры в этой переменной.
Заменить в 3 файлах, в 2 функциях
на
Код: Выделить всё
$additional_keys=array();
$vars = array('additional_keys');
extract($phpbb_dispatcher->trigger_event('core.соответствующее_имя_события', compact($vars)));
$search_key = md5(implode('#', array(
serialize($additional_keys),
sphinx
, в файле
/phpbb/search/fulltext_sphinx.php немного по другому, при определённых условиях нужна возможность изменения конфигурационного файла сфинкса (т.е. там, где в адм. разделе генерируется его конфигурационный файл) и передачи ему своих параметров при поиске.
Событие для изменения конфигурационного файла - добавить
Код: Выделить всё
$vars = array('config_data');
extract($phpbb_dispatcher->trigger_event('core.search_sphinx_modify_config_data', compact($vars)));
перед
Код: Выделить всё
$non_unique = array('sql_query_pre' => true, 'sql_attr_uint' => true, 'sql_attr_timestamp' => true, 'sql_attr_str2ordinal' => true, 'sql_attr_bool' => true);
для передачи своих параметров добавить
Код: Выделить всё
$additional_filters=array();
$vars = array('type', 'additional_filters');
extract($phpbb_dispatcher->trigger_event('core.search_sphinx_keywords_main_query_before', compact($vars)));
if($additional_filters)
{
foreach($additional_filters as $field => $value)
{
$this->sphinx->SetFilter($field, array($value));
}
}
перед