Страница 5 из 14
Re: Пожелания дополнений Event List
Добавлено: 11.08.2015 9:16
2PiK
rxu писал(а): а может, после $found_more_search_matches = false; нормально будет?
Не принципиально, можно и там.
Отправлено спустя 17 минут 53 секунды:
rxu писал(а): Из четырех запросов два события фактически дублировались, одно заменялось добавлением новых переменных в старое. В итоге 2 новых добавляем, 1 старое дополняем.
Тут не понял, что именно дублировалось, там остаются события для fulltext_*, как изменить контрольную сумму кеша при поиске если я использую свои параметры, а они там не учитываются, возможностей изменить конфиг файл сфинкса или передать при поиске свои параметры тоже нет (на трекере подобных запросов не нашёл).
Re: Пожелания дополнений Event List
Добавлено: 11.08.2015 10:45
rxu
2PiK писал(а): Тут не понял, что именно дублировалось
Имелись ввиду запросы от вас и от ostridm. Для
fulltext_*
пока реквесты не делал, чуть позже.
Re: Пожелания дополнений Event List
Добавлено: 11.08.2015 14:45
rxu
2PiK писал(а): serialize($additional_keys),
А зачем тут
serialize()
?
Отправлено спустя 30 минут 49 секунд:
Я бы предложил чуть другой вариант, например:
Код: Выделить всё
// generate a search_key from all the options to identify the results
$search_key_array = array(
implode(', ', $this->split_words),
$type,
$fields,
$terms,
$sort_days,
$sort_key,
$topic_id,
implode(',', $ex_fid_ary),
$post_visibility,
implode(',', $author_ary)
);
$vars = array('search_key_array');
extract($phpbb_dispatcher->trigger_event('core.search_mysql_keyword_modify_search_key', compact($vars)));
$search_key = md5(implode('#', $search_key_array));
Плюс, наверное, включил бы в событие все переменные из числа параметров функции.
Re: Пожелания дополнений Event List
Добавлено: 11.08.2015 17:36
2PiK
Я в коде указываю место и названия переменных которые нужно конкретно мне, сама реализация, другие переменные которые наверняка могут другим понадобиться - это уже на ваше усмотрение.
Re: Пожелания дополнений Event List
Добавлено: 11.08.2015 17:46
rxu
Т.е. приведенный вариант для вас сработает (без сериализации, ее можно сделать отдельно в слушателе), так?
Re: Пожелания дополнений Event List
Добавлено: 12.08.2015 9:06
2PiK
Сработает, там единственная цель - это возможность изменить md5, каким способом неважно.
Отправлено спустя 59 минут 6 секунд:
Ещё по сфинксу добавлю, пока не сделано, у меня в примере используется только передача в функцию SetFilter
, на самом деле там можно (или даже нужно) сделать возможность передачи своих параметров во все доступные функции (SetGroupBy, SetSortMode, SetFieldWeights
).
Re: Пожелания дополнений Event List
Добавлено: 13.08.2015 8:27
rxu
2PiK писал(а): можно (или даже нужно) сделать возможность передачи своих параметров во все доступные функции
Посмотрел код. Для передачи используется клиент Сфинкса из
includes/sphinxapi.php
, следовательно, всю процедуру можно проделать прямо в слушателе, создав там экземпляр объекта:
$this->sphinx = new \SphinxClient();
И уже потом передавать туда всё, что нужно.
Следовательно, задача сводится просто к передаче в событие параметров внешней функции? Либо, если новый экземпляр Сфинкса не будет содержать нужных данных, можно попробовать передать туда текущий экземпляр объекта.
Re: Пожелания дополнений Event List
Добавлено: 13.08.2015 9:42
2PiK
rxu писал(а): следовательно, всю процедуру можно проделать прямо в слушателе, создав там экземпляр объекта
Мм.. такой вариант не пробовал, нужно посмотреть (сейчас не могу), но по-моему это не то, что нужно.
rxu писал(а): Следовательно, задача сводится просто к передаче в событие параметров внешней функции?
Мне нужно было передать сфинксу свои параметры для поиска, т.е. в конструкцию sql запроса
WHERE
добавить свои значения, в других типах поиска там есть события для этого и через
sql_where, sql_match_where
можно менять запрос, в
fulltext_sphinx
для этого используется функция
setFilter
, но событий там нет вообще.
Re: Пожелания дополнений Event List
Добавлено: 13.08.2015 20:24
rxu
2PiK писал(а): такой вариант не пробовал, нужно посмотреть
Хорошо бы посмотреть, чтобы до конца разобраться с оптимальной реализацией.
Re: Пожелания дополнений Event List
Добавлено: 14.08.2015 10:47
2PiK
Посмотрел, не знаю честно говоря, на мой взгляд в примере просто и понятно, туда передаются три массива для
SetGroupBy, SetSortMode, SetFieldWeights
и остальные переменные
$sort_key, $type, $fields
и т.д., как в
fulltext_mysql, fulltext_native, fulltext_postgres, если возвращается не пустой массив то, уже непосредственно в
fulltext_sphinx через соответствующие функции в сфинкс передаются параметры, так и логика сохраняется, всё меняется простым изменением переменных, а не созданием экземпляров и пр.
Отправлено спустя 39 минут 32 секунды:
Ещё пара событий:
1. В файле
/download/file.php нет вообще никаких событий и соответственно возможностей что-то менять при скачивании файлов, перед:
добавить
Код: Выделить всё
$vars = array('display_cat', 'mode', 'attachment', 'attach_id', 'thumbnail', 'extension', 'download_mode');
extract($phpbb_dispatcher->trigger_event('core.download_before_send_file', compact($vars)));
2. В файле
/includes/mcp/mcp_topic.php в функции
mcp_topic_view
есть событие
mcp_topic_review_modify_row
которое в цикле позволяет менять определённые переменные, нужно событие до этого цикла, т.е. как в
viewtopic.php
, туда передаётся массив с id постов, вложения и т.д., перед:
добавить
Код: Выделить всё
$vars = array('rowset', 'post_id_list', 'attachments');
extract($phpbb_dispatcher->trigger_event('core.mcp_topic_review_after_query', compact($vars)));
Re: Пожелания дополнений Event List
Добавлено: 14.08.2015 11:56
rxu
2PiK писал(а): Посмотрел, не знаю честно говоря, на мой взгляд в примере просто и понятно, туда передаются три массива для
На мой взгляд, будет слишком запутанная обвязка для каждого из трех методов, причем неясно, что делать, если из массива доп. переменных разные значения надо передать в разные методы.
Т.е. с экземпляром объекта работает?
Re: Пожелания дополнений Event List
Добавлено: 14.08.2015 15:00
2PiK
Пока делал, вот такое пришло в голову:
Код: Выделить всё
$filters = $this->sphinx->_filters;
$vars = array('type', 'filters');
extract($phpbb_dispatcher->trigger_event('core.search_sphinx_keywords_main_query_before', compact($vars)));
$this->sphinx->_filters = $filters;
Re: Пожелания дополнений Event List
Добавлено: 15.08.2015 5:52
rxu
2PiK писал(а): вот такое пришло в голову
Т.е. новые фильтры добавлять в обход
SetFilter
напрямую в массив? Вроде бы это не комильфо. И потом, тогда выпадают остальные опции -
SetGroupBy, SetSortMode, SetFieldWeights
.
А если тогда так:
Код: Выделить всё
$sphinx = $this->sphinx;
$vars = array('sphinx');
extract($phpbb_dispatcher->trigger_event('core.search_sphinx_keywords_modify_options', compact($vars)));
$this->sphinx = $sphinx;
unset($sphinx);
Re: Пожелания дополнений Event List
Добавлено: 15.08.2015 9:29
2PiK
rxu писал(а): Т.е. новые фильтры добавлять в обход SetFilter напрямую в массив? Вроде бы это не комильфо. И потом, тогда выпадают остальные опции - SetGroupBy, SetSortMode, SetFieldWeights.
И да и нет, смотря как реализовать в listener, можно напрямую (структура массива там понятна), можно:
там же выполняем
SetFilter
и результат плюсуем к массиву, для функций
SetGroupBy, SetSortMode, SetFieldWeights
там просто другие массивы, тут ещё появляется возможность не только добавлять свои значения туда, но и менять уже имеющиеся (только у меня в примере событие расположено до того, как в массиве появляются какие-либо значения)
rxu писал(а): А если тогда так
Работает (тут кстати массив так-же можно менять напрямую), в общем вариантов несколько, все рабочие, выбирать всё равно вам
Re: Пожелания дополнений Event List
Добавлено: 15.08.2015 9:51
rxu
ОК, спасибо, тогда попробуем остановиться на варианте с передачей копии экземпляра клиента в событие, как наиболее гибком.
Отправлено спустя 4 минуты 19 секунд:
2PiK писал(а): у меня в примере событие расположено до того, как в массиве появляются какие-либо значения
Так может, перенести его в место перед
Код: Выделить всё
$this->sphinx->SetLimits($start, (int) $per_page, SPHINX_MAX_MATCHES);
Отправлено спустя 54 минуты 24 секунды:
OK< пока так.
https://tracker.phpbb.com/browse/PHPBB3-14098
https://github.com/phpbb/phpbb/pull/3830