2016-06-22 77 views
0

我試圖寫一個基於所提供的搜索項外部SQL數據庫顯示兩者內部的mediawiki DB結果和結果的插件。Mediawiki的搜索外部數據庫 - PREPEND鉤

我寫的所有的搜索代碼,但我很努力居然顯示我的結果。我檢查了特別版:我的擴展名出現了。

我已經試過這個鉤子:

$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 was here!'); \t return false; }; 你確定你正確地註冊它,你使用$ out作爲輸出而不是echo()嗎? – MaxSem

+0

謝謝Max。這個簡單的例子工作。但是,我最終需要做的是將此鉤子調用移入擴展文件本身。出於某種原因,每當我這樣做,擴展名被加載,但掛鉤沒有註冊。我找到了$ wgSpecialVersionShowHooks並將其設置爲true,所以現在我至少可以看到我的掛鉤是否已註冊。 –

+0

得到它的工作。你必須通過extensions.json註冊鉤子。看到我的答案。 –

回答

0

這裏是Mediawiki的1.26.2我工作的解決方案 - 我無法找到這個文件,但是我能夠從閱讀其他擴展蒐集它。

註冊一個鉤子,你必須在extensions.json文件中聲明其下的「鉤」部分。對我來說,這看起來像是

"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; 
    } 

}