Как вернуть текст из ловушки MediaWiki SearchAfterNoDirectMatch? - PullRequest
0 голосов
/ 26 октября 2019

Я пытаюсь написать MediaWiki Search Hook, который будет перечислять собственные файлы в файловой системе, а затем, в конечном итоге, позволит человеку щелкнуть один из файлов и просмотреть его содержимое.

Мои расширения. json содержит это:

        "Hooks": {
            "SearchAfterNoDirectMatch": "MediaWiki\\Extension\\NativeFileList\\Hooks::onSearchAfterNoDirectMatch"
        },

Файл My Hooks :: onSearchAfterNoDirectMatch выглядит следующим образом:

namespace MediaWiki\Extension\NativeFileList;

class Hooks {
        /**
         * @see https://www.mediawiki.org/wiki/Manual:Hooks/SearchAfterNoDirectMatch
         * @called from https://gerrit.wikimedia.org/g/mediawiki/core/+/master/includes/search/SearchNearMatcher.php
         * @param $searchterm
         * @param $title - array of titles
         * Returns true if it found something, false is otherwise
         */
        public static function onSearchAfterNoDirectMatch( $searchterm, &$title ) {
           $title=Title::newFromText( "test", "bar");
           return false;
    }

}

Моя проблема в том, что текст не возвращается. Ну, это еще хуже. С помощью приведенного выше кода я получаю исключение (но я не знаю, как его отладить, потому что я не вижу исключения). Если я уберу настройку линии $title, она вернется. Если я изменю строку на $title=undefined();, я получу еще одну ошибку. Если я установлю $title="foo";, я не получу ошибку, но не получу foo.

Итак, как мне вернуть поисковый запрос или, что еще лучше, набор поисковых запросов?

Ни один из существующихпоисковые плагины используют современный поиск Hook API, который задокументирован в следующих местах:

Ответы [ 2 ]

0 голосов
/ 03 ноября 2019

SearchAfterNoDirectMatch используется для возврата названия близкого совпадения, а не для дополнения результатов поиска. Для дополнения результатов поиска используйте onSpecialSearchResultsAppend. Вот код добавляет три строки к результатам поиска:

class Hooks {
    /**
     * @see https://www.mediawiki.org/wiki/Manual:Hooks/SearchAfterNoDirectMatch
     * @called from https://gerrit.wikimedia.org/g/mediawiki/core/+/master/includes/search/SearchNearMatcher.php
     * @param $searchterm
     * @param $title - array of titles
     */
    public static function onSpecialSearchResultsAppend( $that, $out, $term ) {
        $out->addHTML("<h3>Extra Search Results:</h3>");
            $out->addHTML("<ul>");
            $out->addHTML("<li>Extra Result #1</li>");
            $out->addHTML("<li>Extra Result #2</li>");
            $out->addHTML("<li>Extra Result #3</li>");
            $out->addHTML("</ul>");
        }
    }
}

Этого должно быть достаточно, чтобы заставить большинство людей работать.

0 голосов
/ 29 октября 2019

Этот хук не может вернуть текст, вы можете просто изменить заголовок, чтобы сгенерировать совпадение из хука. $ title должен быть объектом Title, если код, который вы разместили выше, является точным кодом, который вы используете, исключение вызвано тем, что второй параметр не является одной из констант пространства имен, таких как NS_MAIN

...