2016-06-22 2 views
0

Я пытаюсь написать плагин, который отображает как внутренние результаты DB MediaWiki, так и результаты из внешней базы данных SQL на основе предоставленного поискового запроса.Внешняя база данных для поиска средств массовой информации - preend hook

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

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

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

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

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

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

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

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

+1

Простой пример, который работает для меня, если положить в LocalSettings.php: $ wgHooks [ «SpecialSearchResultsPrepend '] [] = function ($ specialSearch, OutputPage $ out) { \t $ out-> addWikiText (' MaxSem был здесь! '); \t return false; }; Вы уверены, что вы зарегистрировали его правильно, и вы используете $ out для вывода, а не echo()? – MaxSem

+0

Спасибо Макс. Этот простой пример сработал. Тем не менее, мне в конечном итоге нужно переместить этот вызов вызова в сам файл расширения. По какой-то причине, когда я это делаю, расширение загружается, но крючок не зарегистрирован. Я нашел $ wgSpecialVersionShowHooks и установил значение true, так что теперь я могу хотя бы увидеть, зарегистрирован ли мой крючок или нет. –

+0

Получил работу. Вы должны регистрировать перехватчики через extensions.json. См. Мой ответ. –

ответ

0

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

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

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

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

и ExternalSQLSearch.hooks.php, на баребоны пример:

class ExternalSQLSearchHooks { 

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

} 
Смежные вопросы