MediaWiki

来自Tsetien’s Wiki
跳转到导航 跳转到搜索

更新

  1. 從官方網站下載包並上傳到 wiki 根目錄;
    ——如果希望將包重壓縮的話,可用 7-zip 選擇 7z, ultra, LZMA2; dictionary size 和 word size 選到 512M 與 273 並選成 solid 來打包,可節省近 50% 的磁碟空間占用;
  2. 刪除目錄下 /images/ 資料夾, .conf, .htaccess, LocalSettings.php 檔案, 以及用作 logo 與 favicon 的圖(若有)以外的所有檔案;
    ——此處的前提是沒有安裝任何非官方自帶的附加組件,如有安裝其他附加組件,則 /extensions/ 資料夾也不能刪;
  3. 解壓縮包內的真內容到 wiki 根目錄(也即不要有「套層目錄」),將所有資料夾及檔案的權限全部抬升為 755;
  4. 使用 ssh 登入伺服器,進入到 wiki 根目錄下並執行 php maintenance/update.php.

維護

以下是一些從維護指令碼列表上鈔來的清理用指令碼,在使用 ssh 登入至 wiki 安裝路徑後可直接用。

php maintenance/run.php cleanupEmptyCategories.php --force
php maintenance/run.php cleanupTitles.php
php maintenance/run.php cleanupWatchlist.php --fix
php maintenance/run.php cleanupBlocks.php
php maintenance/run.php cleanupUploadStash.php
php maintenance/run.php cleanupRemovedModules.php
php maintenance/run.php deleteEqualMessages.php --delete
php maintenance/run.php deleteEqualMessages.php --delete --delete-talk
php maintenance/run.php deleteOldRevisions.php --delete
php maintenance/run.php deleteOrphanedRevisions.php
php maintenance/run.php deleteArchivedRevisions.php --delete
php maintenance/run.php deleteArchivedFiles.php --delete --force
php maintenance/run.php deleteDefaultMessages.php
php maintenance/run.php deleteSelfExternals.php
php maintenance/run.php purgeChangedPages.php --starttime 20210101 --endtime 20991231
php maintenance/run.php purgeChangedFiles.php --starttime 20210101 --endtime 20991231
php maintenance/run.php purgeExpiredBlocks.php
php maintenance/run.php purgeExpiredWatchlistItems.php
php maintenance/run.php purgeMessageBlobStore.php
php maintenance/run.php purgeModuleDeps.php
php maintenance/run.php purgeOldText.php --purge
php maintenance/run.php purgeParserCache.php --age 1

除此之外,在 wiki 的 MySQL 中,以下這些表可以 truncate 一下: archive, change_tag, change_tag_def, ip_changes, job, l10n_cache, log_search, logging, mathlatexml, mathoid, objectcache, querycache, querycache_info, querycachetwo, recentchanges, searchindex, updatelog, uploadstash, user_newtalk, watchlist, 以及 watchlist_expiry.

技巧

NB
由於過多使用 {{#time:}} 會導致本頁載入過慢,為最優化效能,本頁所有展示日期與時間處理效果的文本均按照將「現在」鎖定為於格林威治時間 113 年 12 月 7 日 20 時 32 分所得之結果實行靜態展示。

自訂語法突顯

在任何時刻新開一列,列首空一格半寬空格,然後再輸入內容,即可被彩現為可自由編輯格式的「程式碼區塊」,比方說,當直接輸入以下內容而不將其包含在 <code> </code>, <pre> </pre><syntaxhighlight> </syntaxhighlight> 中時——

 <span style="color: #007bc7;">若</span> <span style="color: #2e8013;">'''昨日'''</span> <span style="color: #007bc7;">是</span> <span style="color: #0f6b7b;">'''"{{#time:xoY 年 n 月 j 日|now - 1 day|zh}}"'''</span>;<span style="color: #007bc7;">則</span>
    <span style="color: #2e8013;">'''今日'''</span> <span style="color: #007bc7;">是</span> <span style="color: #0f6b7b;">'''"{{#time:xoY 年 n 月 j 日|now|zh}}"'''</span>;<span style="color: #007bc7;">否則</span>
    <span style="color: #007bc7;">返回</span>

就能夠得到如下的效果——

 昨日  "113 年 12 月 6 日"
   今日  "113 年 12 月 7 日"否則
   返回

URL 縮短

出於愚笨的我所完全不能理解的奇妙效果,只要在 MediaWiki 的安裝路徑下建立(或者加寫)一個名為 .conf 的檔案,然後寫入

RewriteEngine On
RewriteRule ^/(.*):(.*) /index.php/$1:$2

之後再建立(或者加寫)一個名為 .htaccess 的檔案,然後寫入

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) /index.php/$1 [L,QSA]

最後再修改 LocalSettings.php 中的以下部分

$wgScriptPath = "";
$wgArticlePath = "/$1";
$wgVariantArticlePath = "/$2/$1";
$wgUsePathInfo = true;

即可實現如同中文維基百科一樣的「URL 縮短」——甚至更棒——由於我的這個 MediaWiki 本身就是安裝在 ‘wiki’ 這個 subdomain 下的,因此對於「不轉換」語言變種,就連 /wiki/ 都省了,就直接是 wiki.tsetien.com/TITLE.

限制訪客權限

修改過 CSS 後的「需要登入」頁面

修改 LocalSettings.php 中的 $wgGroupPermissions['*']['read'], $wgGroupPermissions['*']['edit'], 和 $wgGroupPermissions['*']['createaccount'] 三項可變更訪客的閱讀、編輯與創建使用者的權限。每項設為 true 即為擁有該項權限(也即「可以閱讀」、「可以編輯」、「可以創建使用者」),設為 false 則反之。一般情況下可以作如下設定——

$wgGroupPermissions['*']['read'] = true;
$wgGroupPermissions['*']['edit'] = false;
$wgGroupPermissions['*']['createaccount'] = false;

這樣訪客便可以閱讀,但不能夠修改內容或者創建使用者。如若將第一項也設為 false 則訪客在訪問時會被導向一個「特殊頁面」,被告知需要登入。如果講究的話,還可以透過向 MediaWiki:Common.css 加寫類似如下的 CSS 來讓這個特殊頁面(這本來是一個無法修改內容的頁面)變成如右圖所示的效果。

body.ns--1.ns-special.mw-special-Badtitle.page-Special_错误标题.rootpage-Special_错误标题 h1 {
	color: transparent;
}

body.ns--1.ns-special.mw-special-Badtitle.page-Special_错误标题.rootpage-Special_错误标题 h1::before {
	content: "維護期間,需要登入方可查閱。";
	display: inline;
	color: black;
}

body.ns--1.ns-special.mw-special-Badtitle.page-Special_错误标题.rootpage-Special_错误标题 div#mw-content-text, body.ns--1.ns-special.mw-special-Badtitle.page-Special_错误标题.rootpage-Special_错误标题 div#mw-content-text a, body.ns--1.ns-special.mw-special-Badtitle.page-Special_错误标题.rootpage-Special_错误标题 div#mw-navigation div#mw-head nav#p-personal li#pt-login-private a {
	color: transparent;
}

body.ns--1.ns-special.mw-special-Badtitle.page-Special_错误标题.rootpage-Special_错误标题 div#mw-content-text::before {
	content: "很抱歉,敝站正在維護,您需要先登入方可查閱。";
	display: inline;
	color: black;
}

body.ns--1.ns-special.mw-special-Badtitle.page-Special_错误标题.rootpage-Special_错误标题 div#left-navigation nav#p-namespaces li#ca-nstab-special a span {
	display: none;
}

body.ns--1.ns-special.mw-special-Badtitle.page-Special_错误标题.rootpage-Special_错误标题 div#left-navigation nav#p-namespaces li#ca-nstab-special a::after {
	content: "需要登入";
	display: inline;
	color: black;
}

這樣修改後的頁面更為禮貌、告知了訪客無法閱讀內容的原因,並同時隱去了頁面上的兩處「登入」連結。

LocalSettings.php 雜技

在編寫 MediaWiki 頁面時,使用 {{DISPLAYTITLE:title}} 這個魔術字可以為頁面設定不同於其原本名稱的「顯示標題」;

而在 LocalSettings.php 中加入 $wgRestrictDisplayTitle = false; 則可解除對 {{DISPLAYTITLE:title}}「亂用」的限制,可以任意設定頁面的顯示標題。

設定(或加寫)

$wgUseImageMagick = false;
$wgImageMagickConvertCommand = "";
$wgUseImageResize =false;

可令 MediaWiki 為上傳的圖片檔案自動創建縮圖,這對於個人使用者來說非常有用,因為 MediaWiki 會透過 ImageMagick 創建大量大小不一的縮圖,令 /images/ 資料夾占用的磁碟空間暴增 10 倍以上。

使用國曆

在編寫 MediaWiki 頁面時,可透過使用 {{#time:}} 語法剖析器函式來令日期以國曆顯示,其核心技巧為:用 xoY 來作為年份的代號。如:

使用 得到
{{#time:xoY 年 n 月 j 日|1950-05-01|zh}} 39 年 5 月 1 日
{{#time:xoY 年 m 月 d 日|1950-05-01|zh}} 39 年 05 月 01 日
{{#time:xoY 年 n 月 j 日 (l)|1950-05-01|zh}} 39 年 5 月 1 日 (星期一)
{{#time:xoY-m-d (D)|1948-09-24|en}} 37-09-24 (Fri)
{{#time:l, j F xoY "AR"|1948-09-24|en}} Friday, 24 September 37 AR
{{#time:j. M xoY "n. R. C." (D) |1948-09-24|de}} 24. Sep. 37 n. R. C. (Fr)
{{#time:j xg xoY "г. К. Р." (D)|1948-09-24|ru}} 24 сентября 37 г. К. Р. (пт)
{{#time:中華民国 xoY 年 n 月 j 日 (l)|1948-09-24|ja}} 中華民国 37 年 9 月 24 日 (金曜日)
{{#time:민국 xoY 년 n 월 j 일 (D)|1948-09-24|ko}} 민국 37 년 9 월 24 일 (금)

現在是{{#time:中華民國 xoY 年 n 月 j 日 (l) H 時 i 分|now + 8 hours|zh}} 現在是中華民國 113 年 12 月 8 日 (星期日) 04 時 32 分。
丁度 1 回帰年前は{{#time:中華民国 xoY 年 n 月 j 日 (D) H 時 i 分|now - 31556926 seconds + 9 hours|ja}}でした。 丁度 1 回帰年前は中華民国 112 年 12 月 8 日 (金) 23 時 43 分でした。
In genau zehn tropischen Jahren ist es der<br />
{{#time:l, j. F xoY "n. R. C. um" H:i "Uhr"|now + 315569260 seconds + 1 hour|de}}.
In genau zehn tropischen Jahren ist es der
Freitag, 8. Dezember 123 n. R. C. um 07:39 Uhr.

而當 MediaWiki 的 $wgLanguageCode 為中文($wgLanguageCode = "zh";)時,則可透過向 LocalSettings.php 加寫 $wgDefaultUserOptions['date'] = "minguo"; 來令全站預設採用國曆。不過這裡有一個 bug, 就是如果這樣做的話,使用者的「參數設定」頁面就無法打開了。但這對於一個個人維基來說也不是甚麼大事。將全站的 $wgLanguageCode 改為 zh-tw 則可避免這個 bug, 但是我又喜歡頁面上預設帶有語言變種轉換模組,所以……衡量之下就讓「參數設定」無法打開罷。