Mediawiki search во внешней базе данных - ловушка prepend

Я пытаюсь написать плагин, который отображает как результаты внутренней базы данных mediawiki, так и результаты из внешней базы данных SQL на основе предоставленного условия поиска.

Я написал весь поисковый код, но мне не удается отобразить мои результаты. Я проверил Special: Version, и появляется мое расширение.

Я пробовал этот крючок:

$wgHooks[ 'SpecialSearchResultsPrepend'][] = 'onSpecialSearchResultsPrepend';

Где моя функция

function onSpecialSearchResultsPrepend($t, $out, $term){
    some routine
}

, но я не могу правильно отобразить что-либо на этом крючке. Более того, когда я просто пытаюсь записать в консоль отладки или распечатать необработанный текст отладки, я не получаю вывода от моего расширения.

В документации mediawiki указано, что нужно возвращать false, чтобы отключить общий поисковый вывод. Я пробовал это, чтобы просто убедиться, что я действительно правильно подключился, и возвращение false из ловушки не отключает результаты поиска. Поэтому я считаю, что использую неправильный метод подключения.

Как правильно подключиться к этой функции? Я пробовал в отдельных файлах, глобальных функциях или объявленных внутри классов. Кажется, никто не решил мою проблему. Прямо сейчас я пытаюсь просто вернуть false из основного файла расширения, то есть externalsqlsearch.php.


person Jay Stanley    schedule 22.06.2016    source источник
comment
Простой пример, который работает для меня, если поместить его в LocalSettings.php: $ wgHooks ['SpecialSearchResultsPrepend'] [] = function ($ specialSearch, OutputPage $ out) {$ out- ›addWikiText ('MaxSem был здесь!'); вернуть ложь; }; Вы уверены, что регистрируете его правильно и используете $ out для вывода вместо echo ()?   -  person MaxSem    schedule 23.06.2016
comment
Спасибо, Макс. Этот простой пример сработал. Однако в конечном итоге мне нужно переместить этот вызов ловушки в сам файл расширения. По какой-то причине, когда я это делаю, расширение загружается, но ловушка не регистрируется. Я нашел $ wgSpecialVersionShowHooks и установил для него значение true, так что теперь я могу, по крайней мере, видеть, зарегистрирован мой хук или нет.   -  person Jay Stanley    schedule 23.06.2016
comment
Все заработало. Вы должны зарегистрировать хуки через extension.json. Смотрите мой ответ.   -  person Jay Stanley    schedule 23.06.2016


Ответы (1)


Вот мое рабочее решение для Mediawiki 1.26.2 - мне не удалось найти его в документации, но я смог почерпнуть его из чтения других расширений.

Чтобы зарегистрировать ловушку, вы должны объявить ее в файле extensions.json в разделе «хуки». Для меня это выглядело так

"AutoloadClasses": {
    "ExternalSQLSearchHooks": "ExternalSQLSearch.hooks.php"
},

"Hooks": {
        "SpecialSearchResultsPrepend": [
            "ExternalSQLSearchHooks::onSpecialSearchResultsPrepend"
        ] 
},

а в ExternalSQLSearch.hooks.php пример barebones:

class ExternalSQLSearchHooks {

    public static function onSpecialSearchResultsPrepend($t, $out, $term){
        $out->addWikiText( 'Testing');
        return true;
    }

}
person Jay Stanley    schedule 23.06.2016