Страница 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 нет вообще никаких событий и соответственно возможностей что-то менять при скачивании файлов, перед:

Код: Выделить всё

    if ($thumbnail)
    {
добавить

Код: Выделить всё

    $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 постов, вложения и т.д., перед:

Код: Выделить всё

    foreach ($rowset as $i => $row)
    {
добавить

Код: Выделить всё

    $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; 
:idea:

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, можно напрямую (структура массива там понятна), можно:

Код: Выделить всё

$this->sphinx = new \SphinxClient();
там же выполняем SetFilter и результат плюсуем к массиву, для функций SetGroupBy, SetSortMode, SetFieldWeights там просто другие массивы, тут ещё появляется возможность не только добавлять свои значения туда, но и менять уже имеющиеся (только у меня в примере событие расположено до того, как в массиве появляются какие-либо значения)
rxu писал(а): А если тогда так
Работает (тут кстати массив так-же можно менять напрямую), в общем вариантов несколько, все рабочие, выбирать всё равно вам ;)

Re: Пожелания дополнений Event List

Добавлено: 15.08.2015 9:51
rxu
2PiK писал(а): Работает
ОК, спасибо, тогда попробуем остановиться на варианте с передачей копии экземпляра клиента в событие, как наиболее гибком.

Отправлено спустя 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