MediaWiki 的 skin 研究

從 Luzi82_wiki

跳到: 導航, 搜尋

目錄

這篇文章已經過期

這本章寫的時候,還是 1.4.x 的時代。現在都已經是 1.6 的時代啦。

前言

這個研究不但是為了本站﹙千篇一栗改造計劃﹚,也是為了 TouhouWiki 而幹的。說實話,如果 MediaWiki 有完善的 Skin 開發配套,我也不用寫這篇文章。本文之所以要寫,是因為栗子已經花了很多時間在研究 Skin 的開發。把成果寫在這裡,不但可以讓網友省點時間,也可以應付栗子的失憶問題。

當我寫這篇文章的時候, MediaWiki 的版本為 1.4.3 。本文所針對的也是這個版本。

Skin 是甚麼

理論上如果你真的要問這個問題,那我就覺得你不應該繼續看下去。這篇文章主要是解決 how 的問題,而不是 what 的問題。如果你不知道它是甚麼,那我大慨可以肯定,你不需要繼續看下去,看下去也只會浪費你寶貴的光陰。

就是因為這個原因,我不想寫了。如果有好心人寫寫這個地方,那就多謝了。

技術要求

  • php 。諷刺的是,其實筆者對 php 所知不多。也要懂 php 的 class overloading 。不懂這個的話便完了。

Skin 的基本原理

Skin 的運作元件大部份都在 skin 的目錄中。有小部份在 includes 裡。

includes 裡的 Skin*.php ,包含一些 abstract class 。而系統內置的四個 skin 就是 overload 這兩個而成。

系統會檢查 skin 目錄中的 .php 檔,來得知有多少個 skin 。理論上,只要你在裡面加一個 "Abc.php" 的檔案,你的 skin 目錄就多了個 "Abc" 。然而,有些地方還是要注意的。

  • 一定要 overload "Skin" class 。"SkinPHPTal" 和 "SkinTemplate" 也可以利用。
  • 如果 filename 是 "Abc.php" , class 名字必須是 "SkinAbc" 。其他的也是如此。

MediaWiki 支援 phpTal 。懂得的話可以試試看。如果用 phpTal ,就要 overload "SkinPHPTal" ,否則 "Skin" 。

筆者不會在此提及 phpTal ,而且只會提及如何 overload "Skin" 。如果大家有興趣,可自行研究,也歡迎提供有關的資料。

預設值

Skin 的預設值可以在 LocalSetting.php 上的 $wgDefaultSkin 設定。

從哪裡開始

系統會先執行 Skin 的 outputPage(&$out) 。要研究的話恐話要從那裡開始。

參考

個人工具