檢視 Mediawiki 擴展標籤/Categorytree 的原始碼
←
Mediawiki 擴展標籤/Categorytree
跳至導覽
跳至搜尋
由於以下原因,您無權編輯此頁面:
您請求的操作只有這個群組的使用者能使用:
使用者
您可以檢視並複製此頁面的原始碼。
[[分類:Mediawiki]] ====(一)資料表==== Mediawiki 的分類樹狀結構藏在以下兩個資料表中:wiki_categorylinks,wiki_page 。 以「福留子孫」 wiki 為例,其根部目錄有一個分類「教育」。 select cl_to,cl_type,b.page_title from wiki_categorylinks a left join wiki_page b on a.cl_from=b.page_id where cl_to='教育' 會得到「教育」分類下的所有子分類和所有共筆頁。 select cl_to,cl_type,b.page_title from wiki_categorylinks a left join wiki_page b on a.cl_from=b.page_id where cl_to='教育' && cl_type='subcat' 會得到「教育」分類下的所有子分類。計有:教師、教育財政、終身學習等三個子分類。 select cl_to,cl_type,b.page_title from wiki_categorylinks a left join wiki_page b on a.cl_from=b.page_id where cl_to='教育' && cl_type='page' 會得到「教育」分類下的所有共筆頁。 再對「教育」分類下的「教育財政」再進行遞迴處理,一層層處理下去即可得到整個分類樹。 ====(二)外掛目標==== 在 wiki 頁中寫下: <categorytree mode='pages'>某分類</categorytree> 即可得到以「某分類」之下的完整分類樹,並以 details 和 summary 組織起來。 ====(三)由 categorytree 標籤到輸出 details 結構==== <pre>$wgExtensionFunctions[] = 'wfCategorytree'; function categorytree(){ global $wgParser; $wgParser->setHook('categorytree','renderCategorytree'); } function renderCategorytree($input,$args){ // 因為常數是全域的,不能在函式內定義,所以不能載入 constantWiki.php global $wgDBserver,$wgDBuser,$wgDBpassword,$wgDBname; $connect=mysqli_connect($wgDBserver,$wgDBuser,$wgDBpassword,$wgDBname); if(mysqli_connect_errno($connect)){echo "Failed to connect to MySQL:".mysqli_connect_error();} mysqli_query($connect,"set names utf8"); 用 $input 去得知根部分類是哪一個 用 (isset($args['mode'])?$args['mode']:'預設值') 去偵知 mode 屬性設了什麼 … $sql="select 查詢"; $result=mysqli_query($connect,$sql); while($row=mysqli_fetch_assoc($result)){ … } … return "以 details 和 summary 組成的長字串"; } // 以下函式在本外掛中用不上 function getOption(&$input,$name){ // /mi為多行不分大小寫,找到第一個$name= if(preg_match("/^\s*$name\s*=\s*(.*)/mi",$input,$matches)) { return $matches[1]; }else{return false;} }</pre>
返回到「
Mediawiki 擴展標籤/Categorytree
」。
切換側邊欄
導覽
首頁
近期變更
隨機頁面
MediaWiki說明
工具
連結至此的頁面
相關變更
特殊頁面
頁面資訊
六年制學程
導覽選單
個人工具
登入
命名空間
頁面
討論
變體
視圖
閱讀
檢視原始碼
檢視歷史
更多
搜尋