我們用MediaWiki搭建的網站中,一些頁面需要用到内部搜索結果,我們以前的辦法是采用Google Search API,嵌入JavaScript代碼後就可以顯示Google已經收錄的相關頁面,這個辦法簡單易行,缺點是沒有被收錄的頁面無法出現,已經展示的JS内容不會被搜索引擎發現内容。
十八大前後這一陣子Google搜索一直不正常,也影響到我們網站上含有Google搜索代碼的頁面,間歇性會出現打不開或者打開極慢的情況,影響用戶正常訪問我們的頁面。這個問題有可能長期存在,所以必須設法解決了,否則隻好把相關頁面删除。
昨天試了一些辦法,後來用在頁面中嵌入PHP程序顯示Wiki自己的内部搜索結果的辦法算是基本上可以解決,步驟如下:
- 對相關MediaWiki網站打開Include_PHP擴展程序,以便支持在頁面中嵌入PHP程序;
- 在scripting目錄下創建文件search_result.php,在其中調用MediaWiki的搜索函數,程序附後;
- 在相關頁面或者模闆中嵌入代碼<include_PHP file="search_result" />,調用上面程序;
- 進行需要的模闆更新、runJobs.php以及緩存更新等操作。
一個熱門詞搜索的頁面修改後的例子:http://xizang.mingluji.com/%E9%A3%9F%E5%93%81
search_result.php程序如下:
<?php
$title = str_replace("/","",strrchr(urldecode($_SERVER["REQUEST_URI"]),"/"));
$par=$title;
global $wgRequest, $wgUser;
// Strip underscores from title parameter; most of the time we'll want
// text form here. But don't strip underscores from actual text params!
$titleParam = str_replace( '_', ' ', $par );
// Fetch the search term
$search = str_replace( "\n", " ", $wgRequest->getText( 'search', $titleParam ) );
$searchPage = new SpecialSearch( $wgRequest, $wgUser );
$searchPage->showResults( $search );
需要說明的是,調用上面的的程序後,還無法控制整個頁面的顯示順序,内部搜索結果總是在頁面上方,也許以後可以找到解決的辦法,現在先用這樣的。
2015年初補充:在把MediaWiki從1.16.0升級到1.23.5後,上面的辦法就失效了,也沒有找到很簡單的修改辦法,就暫時去掉了這樣的頁面。以後如果需要的話,可以考慮自己編寫MediaWiki的擴展程序來實現。
评论