Mediawiki 擴展標籤

出自六年制學程
在2020年10月25日 (日) 17:13由丁志仁對話 | 貢獻所做的修訂版本

跳轉到: 導覽搜尋

原理解說

一、撰寫

於 extension.json 中設定以下的勾子(hooks):
...
  "Hooks": {
    "ParserFirstCallInit": "ExampleExtension::onParserFirstCallInit"
   },
...
新增程式:
<?php
class ExampleExtension {
	// 註冊實體化回傳外掛
	public static function onParserFirstCallInit( Parser $parser ) {
		// 當解析器看到<sample>標記時,它會執行renderTagSample(見下文)
		$parser->setHook( 'sample', [ self::class, 'renderTagSample' ] );
	}

	// 實體化 <sample> 的函式定義
	public static function renderTagSample( $input, array $args, Parser $parser, PPFrame $frame ) {
		// 在本例中這個函數只是將用戶輸入中的轉義字符解析為原來的樣子並再次輸出它
		return htmlspecialchars( $input );
	}
}
...

二、使用

此範例為<sample>標籤註冊回傳函式。當用戶將標籤:<sample arg1='xxx' arg2='xxx'>...input...</sample>添加到頁面時,解析器將調用renderTagSample()函式,傳入四個參數:

  1. $input:<sample>和</sample>標籤之間輸入。如果標籤是「開始與結束合體的」則輸入'null',即<sample />
  2. $args:標籤屬性,像 HTML 標籤屬性一樣輸入;這是一個以屬性名稱作鍵的陣列(鍵-值對)。
  3. $parser:父解析器(一個解析器物件);更上級的不掛,使用它來獲取上下文標題,解析維基文字、大括號,註冊鏈接關係和依賴關係等。
  4. $frame:父框架(PPFrame物件)。它與$parser一起使用,為解析器提供有關調用外掛的上下文的更完整資訊。

三、設定

MediaWiki 1.25 之前外掛名和外觀的配置是在 PHP 檔名或外觀名稱一致的,如 MyExtension.php 或 MySkin.php。
require_once "$IP/extensions/Hello/Hello.php";
require_once "$IP/extensions/FooBar/FooBar.php";
$wgFooBarEnable = true;
require_once "$IP/skins/Baz/Baz.php";
也可以寫成:
wfLoadExtensions( array( 'Hello', 'FooBar' ) );
$wgFooBarEnable = true;
wfLoadSkin( 'Baz' );
如果您將外掛放在 $IP/extensions 以外的位置,您需要重設 $wgExtensionDirectory 。如果您的皮膚未在 $IP/skins 中,您需要重設 $wgStyleDirectory 。重設必須在您載入任何外掛或皮膚前完成。
$wgExtensionDirectory = '/some/path';
wfLoadExtension('FooBar'); // 參看 /some/path/FooBar/extension.json
$wgStyleDirectory = '/my/skins';
wfLoadSkins(array('BarBaz','BazBar')); // 參看 /my/skins/BarBaz/skin.json 及 /my/skins/BazBar/skin.json

四、實例

  • LinkedImages.php
    LocalSettings.php 中
include_once("$IP/extensions/LinkedImages.php");

參考資料

  1. 外掛標籤手冊
  2. 外掛如何註冊
  3. 各類外掛手冊

自行撰寫的外掛標籤

一、LinkedImages.php(已被封存)

原用於讓圖產生連結,是非常好的撰寫範例。

(一)已被封存

  1. MediaWiki 1.14 版之後支援語法 [[Image:圖名|寬px|link=目的頁]],如

    Go top.gif

    上述語法中,若 link= 留空,則該圖像將不再可點擊。
  2. 也可以使用 CSS ,請參考:https://www.mediawiki.org/wiki/Manual:Linked_images/zh#Site_CSS
  3. 有伺服器權限時,去啟用 $wgAllowExternalImages(允許來自任何域的外部圖像)或 $wgAllowExternalImagesFrom(限制域的列表),然後創建到「外部」圖像的「外部」鏈接。要使用完整 URL 而不是本地鏈接。
    也可以用 CSS plainlinks 類別來消除圖像,只留下該圖像的「外部鏈接」,如:
    http://jendo.org/wiki1231/images/4/49/Go_top.gif
  4. 使用 Raw HTML,請參考:https://www.mediawiki.org/wiki/Manual:Linked_images/zh#Raw_HTML
  5. 使用 Via extensions,請參考:https://www.mediawiki.org/wiki/Manual:Linked_images/zh#Via_extensions
  6. 您可以做一些更麻煩的事情,例如修改 /includes/Sanitizer.php (HTML標籤白名單在其中),然後將添加到允許的標籤列表中。

(二)舊外掛標籤的說明

(三)使用範例

「跳至頁首」內容為:
<p align='right'><linkedimage>
wikipage=#top
img_src=Go_top.gif
tooltip=跳頁首
img_alt=跳頁首
</linkedimage></p>

二、videoflash.php