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

Форум для авторов расширений для phpBB. Здесь можно попросить помощи в разработке у коллег.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Мини [FAQ] по phpBB3.1.x/3.3.x | FAQ | Как задавать вопросы | Как устанавливать расширения

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
2PiK
phpBB 1.4.2
Сообщения: 69
Зарегистрирован: 06.08.2008 9:18
Благодарил (а): 10 раз
Поблагодарили: 12 раз
Контактная информация:

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

Сообщение 2PiK » 11.08.2015 9:16

rxu писал(а): а может, после $found_more_search_matches = false; нормально будет?
Не принципиально, можно и там.

Отправлено спустя 17 минут 53 секунды:
rxu писал(а): Из четырех запросов два события фактически дублировались, одно заменялось добавлением новых переменных в старое. В итоге 2 новых добавляем, 1 старое дополняем.
Тут не понял, что именно дублировалось, там остаются события для fulltext_*, как изменить контрольную сумму кеша при поиске если я использую свои параметры, а они там не учитываются, возможностей изменить конфиг файл сфинкса или передать при поиске свои параметры тоже нет (на трекере подобных запросов не нашёл).

Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 14277
Зарегистрирован: 12.05.2006 18:16
Откуда: Красноярск
Благодарил (а): 340 раз
Поблагодарили: 1479 раз
Контактная информация:

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

Сообщение rxu » 11.08.2015 10:45

2PiK писал(а): Тут не понял, что именно дублировалось
Имелись ввиду запросы от вас и от ostridm. Для fulltext_* пока реквесты не делал, чуть позже.
Изображение

Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 14277
Зарегистрирован: 12.05.2006 18:16
Откуда: Красноярск
Благодарил (а): 340 раз
Поблагодарили: 1479 раз
Контактная информация:

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

Сообщение rxu » 11.08.2015 14:45

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));
Плюс, наверное, включил бы в событие все переменные из числа параметров функции.
Изображение

2PiK
phpBB 1.4.2
Сообщения: 69
Зарегистрирован: 06.08.2008 9:18
Благодарил (а): 10 раз
Поблагодарили: 12 раз
Контактная информация:

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

Сообщение 2PiK » 11.08.2015 17:36

Я в коде указываю место и названия переменных которые нужно конкретно мне, сама реализация, другие переменные которые наверняка могут другим понадобиться - это уже на ваше усмотрение.

Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 14277
Зарегистрирован: 12.05.2006 18:16
Откуда: Красноярск
Благодарил (а): 340 раз
Поблагодарили: 1479 раз
Контактная информация:

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

Сообщение rxu » 11.08.2015 17:46

Т.е. приведенный вариант для вас сработает (без сериализации, ее можно сделать отдельно в слушателе), так?
Изображение

2PiK
phpBB 1.4.2
Сообщения: 69
Зарегистрирован: 06.08.2008 9:18
Благодарил (а): 10 раз
Поблагодарили: 12 раз
Контактная информация:

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

Сообщение 2PiK » 12.08.2015 9:06

Сработает, там единственная цель - это возможность изменить md5, каким способом неважно.

Отправлено спустя 59 минут 6 секунд:
Ещё по сфинксу добавлю, пока не сделано, у меня в примере используется только передача в функцию SetFilter, на самом деле там можно (или даже нужно) сделать возможность передачи своих параметров во все доступные функции (SetGroupBy, SetSortMode, SetFieldWeights).

Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 14277
Зарегистрирован: 12.05.2006 18:16
Откуда: Красноярск
Благодарил (а): 340 раз
Поблагодарили: 1479 раз
Контактная информация:

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

Сообщение rxu » 13.08.2015 8:27

2PiK писал(а): можно (или даже нужно) сделать возможность передачи своих параметров во все доступные функции
Посмотрел код. Для передачи используется клиент Сфинкса из includes/sphinxapi.php, следовательно, всю процедуру можно проделать прямо в слушателе, создав там экземпляр объекта: $this->sphinx = new \SphinxClient();
И уже потом передавать туда всё, что нужно.
Следовательно, задача сводится просто к передаче в событие параметров внешней функции? Либо, если новый экземпляр Сфинкса не будет содержать нужных данных, можно попробовать передать туда текущий экземпляр объекта.
:?:
Изображение

2PiK
phpBB 1.4.2
Сообщения: 69
Зарегистрирован: 06.08.2008 9:18
Благодарил (а): 10 раз
Поблагодарили: 12 раз
Контактная информация:

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

Сообщение 2PiK » 13.08.2015 9:42

rxu писал(а): следовательно, всю процедуру можно проделать прямо в слушателе, создав там экземпляр объекта
Мм.. такой вариант не пробовал, нужно посмотреть (сейчас не могу), но по-моему это не то, что нужно.
rxu писал(а): Следовательно, задача сводится просто к передаче в событие параметров внешней функции?
Мне нужно было передать сфинксу свои параметры для поиска, т.е. в конструкцию sql запроса WHERE добавить свои значения, в других типах поиска там есть события для этого и через sql_where, sql_match_where можно менять запрос, в fulltext_sphinx для этого используется функция setFilter, но событий там нет вообще.

Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 14277
Зарегистрирован: 12.05.2006 18:16
Откуда: Красноярск
Благодарил (а): 340 раз
Поблагодарили: 1479 раз
Контактная информация:

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

Сообщение rxu » 13.08.2015 20:24

2PiK писал(а): такой вариант не пробовал, нужно посмотреть
Хорошо бы посмотреть, чтобы до конца разобраться с оптимальной реализацией.
Изображение

2PiK
phpBB 1.4.2
Сообщения: 69
Зарегистрирован: 06.08.2008 9:18
Благодарил (а): 10 раз
Поблагодарили: 12 раз
Контактная информация:

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

Сообщение 2PiK » 14.08.2015 10:47

Посмотрел, не знаю честно говоря, на мой взгляд в примере просто и понятно, туда передаются три массива для 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)));

Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 14277
Зарегистрирован: 12.05.2006 18:16
Откуда: Красноярск
Благодарил (а): 340 раз
Поблагодарили: 1479 раз
Контактная информация:

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

Сообщение rxu » 14.08.2015 11:56

2PiK писал(а): Посмотрел, не знаю честно говоря, на мой взгляд в примере просто и понятно, туда передаются три массива для
На мой взгляд, будет слишком запутанная обвязка для каждого из трех методов, причем неясно, что делать, если из массива доп. переменных разные значения надо передать в разные методы.
Т.е. с экземпляром объекта работает?
Изображение

2PiK
phpBB 1.4.2
Сообщения: 69
Зарегистрирован: 06.08.2008 9:18
Благодарил (а): 10 раз
Поблагодарили: 12 раз
Контактная информация:

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

Сообщение 2PiK » 14.08.2015 15:00

Пока делал, вот такое пришло в голову:

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

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

Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 14277
Зарегистрирован: 12.05.2006 18:16
Откуда: Красноярск
Благодарил (а): 340 раз
Поблагодарили: 1479 раз
Контактная информация:

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

Сообщение rxu » 15.08.2015 5:52

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); 
Изображение

2PiK
phpBB 1.4.2
Сообщения: 69
Зарегистрирован: 06.08.2008 9:18
Благодарил (а): 10 раз
Поблагодарили: 12 раз
Контактная информация:

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

Сообщение 2PiK » 15.08.2015 9:29

rxu писал(а): Т.е. новые фильтры добавлять в обход SetFilter напрямую в массив? Вроде бы это не комильфо. И потом, тогда выпадают остальные опции - SetGroupBy, SetSortMode, SetFieldWeights.
И да и нет, смотря как реализовать в listener, можно напрямую (структура массива там понятна), можно:

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

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

Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 14277
Зарегистрирован: 12.05.2006 18:16
Откуда: Красноярск
Благодарил (а): 340 раз
Поблагодарили: 1479 раз
Контактная информация:

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

Сообщение rxu » 15.08.2015 9:51

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
Изображение

Ответить

Вернуться в «Для авторов»