我如何 return 来自 MediaWiki SearchAfterNoDirectMatch 挂钩的文本?

How do I return text from the MediaWiki SearchAfterNoDirectMatch hook?

我正在尝试编写一个 MediaWiki 搜索挂钩,它将列出文件系统中的本机文件,然后最终允许人们单击其中一个文件并查看其内容。

我的 extensions.json 包含这个:

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

我的 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;
    }

}

我的问题是 return 没有文本。嗯,比那更糟。使用上面的代码,我得到了一个异常(但我不知道如何调试它,因为我看不到异常)。如果我把行设置 $title 拿出来,它就是 returns。如果我将行更改为 $title=undefined(); 我会收到另一个错误。如果我设置 $title="foo"; 我没有错误,但没有 foo.

那么我如何 return 一次搜索命中,或者更好的是一组搜索命中?

None 的现有搜索插件使用现代搜索 Hook api,它记录在这些位置:

该挂钩不能 return 文本,您只需更改标题即可从挂钩生成匹配项。 $title 必须是标题 object,如果您在上面发布的代码正是您正在使用的代码,您的异常是由于第二个参数不是名称空间常量之一,例如 NS_MAIN

SearchAfterNoDirectMatch用于return一个near-match的标题,而不是补充搜索结果。要补充搜索结果,请使用 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>");
        }
    }
}

这应该足以让大多数人继续前进。