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, 但是我又喜欢页面上预设带有语言变种转换模组,所以……衡量之下就让“参数设定”无法打开罢。