Mediawiki 擴展標籤:修訂版本之間的差異
出自六年制學程
(→自行撰寫的外掛標籤) |
(→(一)在 mwdetails 標籤內部) |
||
(未顯示2位用戶所作出之40次版本) | |||
第 2 行: | 第 2 行: | ||
==原理解說== | ==原理解說== | ||
===一、撰寫=== | ===一、撰寫=== | ||
− | 於 extension.json | + | ====(一)新版==== |
+ | 於 extension.json 中設定要載入的 php 以及執行的勾子(hooks):<pre>{ | ||
... | ... | ||
− | + | "AutoloadClasses": {"擴展名": "php 檔相對路徑"}, | |
− | + | "Hooks": {"勾點": ["類別名::入口函式名"]} | |
− | + | ... | |
− | ...</pre> | + | }</pre> |
− | + | 如:<pre>{ | |
− | + | "AutoloadClasses": {"Details": "includes/details.php"}, | |
− | <?php | + | "Hooks": {"ParserFirstCallInit": ["Details::init"]} |
− | class | + | }</pre> |
− | + | 載入的 php 程式,如:<pre><?php | |
− | public static function | + | class Details { |
− | + | public static function init( Parser $parser ) { | |
− | $parser->setHook( ' | + | $parser->setHook( 'mwdetails', [ self::class, 'renderTagDetails' ] ); |
+ | // 當解析器看到 <mwdetails> 標籤時,就執行 renderTagDetails (見下文) | ||
} | } | ||
− | + | public static function renderTagDetails( $input, array $args, Parser $parser, PPFrame $frame ) { | |
− | + | // 在本例中這個函數只是將 <mwdetails> 換成 <details> 再輸出它 | |
− | public static function | + | return "<details>".$input."</details>"; |
− | // | + | |
− | return | + | |
} | } | ||
} | } | ||
− | .. | + | ?></pre> |
+ | ====(二)舊版==== | ||
+ | <pre><?php | ||
+ | $wgExtensionFunctions[] = 'wfDetails'; | ||
+ | function wfDetails() { | ||
+ | global $wgParser; | ||
+ | $wgParser->setHook('mwdetails', 'renderDetails'); | ||
+ | } | ||
+ | function renderDetails($input,$args) { | ||
+ | return "<details>".$input."</details>"; | ||
+ | } | ||
+ | ?></pre> | ||
+ | |||
===二、使用=== | ===二、使用=== | ||
− | + | 當用戶將標籤:<擴展標籤 arg1='xxx' arg2='xxx'>...input...</擴展標籤>添加到頁面時,解析器將調用實體化函式,傳入四個參數: | |
− | #$input:< | + | #$input:<擴展標籤>和</擴展標籤>標籤之間的輸入。如果是「開始與結束合體的標籤」,即<擴展標籤 />, $input 則輸入'null' |
#$args:標籤屬性,像 HTML 標籤屬性一樣輸入;這是一個以屬性名稱作鍵的陣列(鍵-值對)。 | #$args:標籤屬性,像 HTML 標籤屬性一樣輸入;這是一個以屬性名稱作鍵的陣列(鍵-值對)。 | ||
− | #$parser:父解析器(一個解析器物件) | + | #$parser:父解析器(一個解析器物件);更上級的外掛,使用它來獲取上下文標題,解析維基文字、大括號,註冊鏈接關係和依賴關係等。 |
#$frame:父框架(PPFrame物件)。它與$parser一起使用,為解析器提供有關調用外掛的上下文的更完整資訊。 | #$frame:父框架(PPFrame物件)。它與$parser一起使用,為解析器提供有關調用外掛的上下文的更完整資訊。 | ||
+ | |||
===三、設定=== | ===三、設定=== | ||
+ | ====(一)新版==== | ||
+ | 在 LocalSettings.php 中加<pre> | ||
+ | wfLoadExtension( '擴展資料夾' );</pre> | ||
+ | |||
+ | ====(二)舊版==== | ||
MediaWiki 1.25 之前外掛名和外觀的配置是在 PHP 檔名或外觀名稱一致的,如 MyExtension.php 或 MySkin.php。<pre> | MediaWiki 1.25 之前外掛名和外觀的配置是在 PHP 檔名或外觀名稱一致的,如 MyExtension.php 或 MySkin.php。<pre> | ||
require_once "$IP/extensions/Hello/Hello.php"; | require_once "$IP/extensions/Hello/Hello.php"; | ||
第 46 行: | 第 64 行: | ||
$wgStyleDirectory = '/my/skins'; | $wgStyleDirectory = '/my/skins'; | ||
wfLoadSkins(array('BarBaz','BazBar')); // 參看 /my/skins/BarBaz/skin.json 及 /my/skins/BazBar/skin.json</pre> | wfLoadSkins(array('BarBaz','BazBar')); // 參看 /my/skins/BarBaz/skin.json 及 /my/skins/BazBar/skin.json</pre> | ||
− | === | + | |
− | * | + | ===四、勾子=== |
− | * | + | *ParserFirstCallInit:語法解析一開始的時候 |
− | + | *#Details ,HTML5 的展開收起標籤 | |
+ | *BeforePageDisplay:顯示之前 | ||
+ | *#BoilerPlate 鍋爐板,用來示範的空擴展 | ||
==參考資料== | ==參考資料== | ||
− | #[ | + | #[[mw:Manual:Hooks/zh|鉤子說明手冊]] |
− | #[ | + | #[[mw:Manual:Developing_extensions/zh|開發擴展手冊]] |
− | #[https:// | + | #[[mw:Manual:Tag_extensions/zh|外掛標籤手冊]] |
+ | #[[mw:Manual:Extension_registration/zh|外掛如何註冊]] | ||
+ | #[[mw:Manual:Extensions/zh|各類外掛手冊]] | ||
+ | #常見的穩定擴展說明 | ||
+ | ##[https://zh.moegirl.org.cn/zh-hant/Help:Poem poem的用法] | ||
+ | ##BoilerPlate 鍋爐板,用來示範的空擴展 | ||
+ | ##Examples 一些用來擴展 BoilerPlate 的小擴展的集合 | ||
+ | ##ChangeUserPasswords 改密碼,密碼由系統生成,無法自訂。「特殊頁面 / 使用者與權限 / 更改使用者密碼」 | ||
+ | ##CSS 允許將串接樣式表載入到特定頁中。在目標頁中加入{{#css:樣式檔路徑或樣式定義}} | ||
+ | |||
==自行撰寫的外掛標籤== | ==自行撰寫的外掛標籤== | ||
===一、LinkedImages.php(已被封存)=== | ===一、LinkedImages.php(已被封存)=== | ||
第 82 行: | 第 111 行: | ||
====(一)為 [https://www.mediawiki.org/wiki/Extension:EmbedVideo EmbedVideo] 所取代==== | ====(一)為 [https://www.mediawiki.org/wiki/Extension:EmbedVideo EmbedVideo] 所取代==== | ||
====(二)[https://www.mediawiki.org/w/index.php?oldid=3455067 舊外掛標籤的說明]==== | ====(二)[https://www.mediawiki.org/w/index.php?oldid=3455067 舊外掛標籤的說明]==== | ||
+ | |||
+ | ===三、details.php(丁丁所寫)=== | ||
+ | 用來使 HTML5 的 details、summary 兩標籤生效,會將 wiki 頁中的 mwdetails 標籤換成 details 標籤。 | ||
+ | |||
+ | ====(一)在 mwdetails 標籤內部==== | ||
+ | #所有的 HTML 標籤不會再被過濾掉,如: summary 標籤 | ||
+ | #可以在內部再放入巢狀的 details 標籤。如果外掛標籤名選用 details 而非 mwdetails 就無法在內部使用巢狀功能,因為外掛標籤結束和內層的 details 標籤結束,兩者會相混肴。 | ||
+ | #列點 wiki 語法,「#,*,:」均會被解譯 | ||
+ | #*2024.02.02芸伍註:單層中括號包網址、等號轉標題、單引號已可以被解譯 | ||
+ | #其他 wiki 語法:雙層中括號不會被解譯 | ||
+ | |||
+ | ====(二) details 標籤參考資料==== | ||
+ | *[https://www.zhangxinxu.com/wordpress/2018/01/html5-details-summary-no-js-ux/ 借助HTML5 details,summary無JS實現各種交互效果] | ||
+ | |||
+ | ===四、test.php(丁丁所寫)=== | ||
+ | #用來研究新舊版本 mediawiki 的全域變數與相關物件之用。 | ||
+ | #把要研究的東西賽進 renderTest 函式中 | ||
+ | #去[http://nice-learning.tw/nlWiki/index.php?title=不錯學群/01/晨課/週三 不錯學群/01/晨課/週三]頁面觀察結果。 | ||
+ | #須要登入後,重按「編輯」與「儲存變更」,才會顯示新的結果。 | ||
+ | |||
+ | ===五、sqlTbl.php(丁丁所寫)=== | ||
+ | #把資料表以 select 指令,輸出為 wiki 表格 | ||
+ | #將參考 [http://home.jendo.org/printOut/平台化討論.html 平台化討論.html] 中 CSS .wikiInCell 類別的運用,改善表格內解析 | ||
+ | #參考 home.jendo.org 中 ET 類別 wiki 資料夾中 wikiInCell.php ,將表格內的列點 doBlockLevels 解析,並將#,*解析成對 .wikiInCell 適應的形式。 | ||
+ | #用[http://well-being-ng.net/wellBeingNg/index.php?title=平台化/簡表 平台化/簡表]當作開發測試對象 | ||
+ | |||
+ | ===六、projectSchedule.php(丁丁所寫)=== | ||
+ | #外觀請參考 [http://well-being-ng.net/wellBeingNg/index.php?title=Talk:「推動我國跨校選修平台」計畫書#projectSchedule 討論:「推動我國跨校選修平台」計畫書]之「projectSchedule」段。 | ||
+ | |||
+ | 撰寫格式:<pre> | ||
+ | <projectSchedule> | ||
+ | 年=第一年;第二年 | ||
+ | 第一年=幾月;幾月 | ||
+ | 第二年=幾月;幾月;幾月;幾月;幾月 | ||
+ | 項目=第一個工作項目;第二個工作項目;第三個工作項目;… | ||
+ | 第一個工作項目=第幾年/幾月;第幾年/幾月;第幾年/幾月 | ||
+ | 第二個工作項目=第幾年/幾月;第幾年/幾月;第幾年/幾月 | ||
+ | 第三個工作項目=第幾年/幾月;第幾年/幾月;第幾年/幾月 | ||
+ | 列高=…(預設25) | ||
+ | 項目寬=…(預設130) | ||
+ | 月份寬=…(預設42) | ||
+ | … | ||
+ | </projectSchedule></pre> | ||
+ | 可用屬性: | ||
+ | #font-family=字體(預設標楷體) | ||
+ | #font-size=字體大小(預設10pt) | ||
+ | #background=著色的色碼或顏色名稱(預設#aaccf2) | ||
+ | |||
+ | ===七、projectBudget.php(丁丁所寫)=== | ||
+ | #外觀請參參考 [http://well-being-ng.net/wellBeingNg/index.php?title=Talk:「推動我國跨校選修平台」計畫書#projectBudget 討論:「推動我國跨校選修平台」計畫書]之「projectBudget」段。 | ||
+ | #使用 DS218+ 上面 wiki 資料庫的「計畫經費」表,由「專案名稱」欄控制。 | ||
+ | 撰寫格式:<pre> | ||
+ | <projectBudget> | ||
+ | 專案名稱=○○○○○○○○○○ | ||
+ | 計畫期程=□□□年□□月□□日至□□□年□□月□□日 | ||
+ | 列高=…(預設20) | ||
+ | </projectBudget></pre> | ||
+ | 可用屬性: | ||
+ | #tWidth=預算表寬度(預設510pt,印出為 18cm ) | ||
+ | #font-family=字體(預設標楷體) | ||
+ | #font-size=字體大小(預設10pt) | ||
+ | #background=著色的色碼或顏色名稱(預設#f2f0aa) |
2024年2月2日 (五) 13:44的最新修訂版本
目錄
原理解說
一、撰寫
(一)新版
於 extension.json 中設定要載入的 php 以及執行的勾子(hooks):{ ... "AutoloadClasses": {"擴展名": "php 檔相對路徑"}, "Hooks": {"勾點": ["類別名::入口函式名"]} ... }如:
{ "AutoloadClasses": {"Details": "includes/details.php"}, "Hooks": {"ParserFirstCallInit": ["Details::init"]} }載入的 php 程式,如:
<?php class Details { public static function init( Parser $parser ) { $parser->setHook( 'mwdetails', [ self::class, 'renderTagDetails' ] ); // 當解析器看到 <mwdetails> 標籤時,就執行 renderTagDetails (見下文) } public static function renderTagDetails( $input, array $args, Parser $parser, PPFrame $frame ) { // 在本例中這個函數只是將 <mwdetails> 換成 <details> 再輸出它 return "<details>".$input."</details>"; } } ?>
(二)舊版
<?php $wgExtensionFunctions[] = 'wfDetails'; function wfDetails() { global $wgParser; $wgParser->setHook('mwdetails', 'renderDetails'); } function renderDetails($input,$args) { return "<details>".$input."</details>"; } ?>
二、使用
當用戶將標籤:<擴展標籤 arg1='xxx' arg2='xxx'>...input...</擴展標籤>添加到頁面時,解析器將調用實體化函式,傳入四個參數:
- $input:<擴展標籤>和</擴展標籤>標籤之間的輸入。如果是「開始與結束合體的標籤」,即<擴展標籤 />, $input 則輸入'null'
- $args:標籤屬性,像 HTML 標籤屬性一樣輸入;這是一個以屬性名稱作鍵的陣列(鍵-值對)。
- $parser:父解析器(一個解析器物件);更上級的外掛,使用它來獲取上下文標題,解析維基文字、大括號,註冊鏈接關係和依賴關係等。
- $frame:父框架(PPFrame物件)。它與$parser一起使用,為解析器提供有關調用外掛的上下文的更完整資訊。
三、設定
(一)新版
在 LocalSettings.php 中加wfLoadExtension( '擴展資料夾' );
(二)舊版
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
四、勾子
- ParserFirstCallInit:語法解析一開始的時候
- Details ,HTML5 的展開收起標籤
- BeforePageDisplay:顯示之前
- BoilerPlate 鍋爐板,用來示範的空擴展
參考資料
- 鉤子說明手冊
- 開發擴展手冊
- 外掛標籤手冊
- 外掛如何註冊
- 各類外掛手冊
- 常見的穩定擴展說明
- poem的用法
- BoilerPlate 鍋爐板,用來示範的空擴展
- Examples 一些用來擴展 BoilerPlate 的小擴展的集合
- ChangeUserPasswords 改密碼,密碼由系統生成,無法自訂。「特殊頁面 / 使用者與權限 / 更改使用者密碼」
- CSS 允許將串接樣式表載入到特定頁中。在目標頁中加入{{#css:樣式檔路徑或樣式定義}}
自行撰寫的外掛標籤
一、LinkedImages.php(已被封存)
原用於讓圖產生連結,是非常好的撰寫範例。
(一)已被封存
- MediaWiki 1.14 版之後支援語法 [[Image:圖名|寬px|link=目的頁]],如上述語法中,若 link= 留空,則該圖像將不再可點擊。
- 也可以使用 CSS ,請參考:https://www.mediawiki.org/wiki/Manual:Linked_images/zh#Site_CSS
- 有伺服器權限時,去啟用 $wgAllowExternalImages(允許來自任何域的外部圖像)或 $wgAllowExternalImagesFrom(限制域的列表),然後創建到「外部」圖像的「外部」鏈接。要使用完整 URL 而不是本地鏈接。
也可以用 CSS plainlinks 類別來消除圖像,只留下該圖像的「外部鏈接」,如: - 使用 Raw HTML,請參考:https://www.mediawiki.org/wiki/Manual:Linked_images/zh#Raw_HTML
- 使用 Via extensions,請參考:https://www.mediawiki.org/wiki/Manual:Linked_images/zh#Via_extensions
- 您可以做一些更麻煩的事情,例如修改 /includes/Sanitizer.php (HTML標籤白名單在其中),然後將添加到允許的標籤列表中。
(二)舊外掛標籤的說明
(三)使用範例
「跳至頁首」內容為:<p align='right'><linkedimage> wikipage=#top img_src=Go_top.gif tooltip=跳頁首 img_alt=跳頁首 </linkedimage></p>
二、videoflash.php(已被封存)
在 videoflash.php 最前面的多行註解中,有使用範例。
適應 HTML4 和 5 ,是解析標籤所夾內容與標籤屬性的參考範例。
(一)為 EmbedVideo 所取代
(二)舊外掛標籤的說明
三、details.php(丁丁所寫)
用來使 HTML5 的 details、summary 兩標籤生效,會將 wiki 頁中的 mwdetails 標籤換成 details 標籤。
(一)在 mwdetails 標籤內部
- 所有的 HTML 標籤不會再被過濾掉,如: summary 標籤
- 可以在內部再放入巢狀的 details 標籤。如果外掛標籤名選用 details 而非 mwdetails 就無法在內部使用巢狀功能,因為外掛標籤結束和內層的 details 標籤結束,兩者會相混肴。
- 列點 wiki 語法,「#,*,:」均會被解譯
- 2024.02.02芸伍註:單層中括號包網址、等號轉標題、單引號已可以被解譯
- 其他 wiki 語法:雙層中括號不會被解譯
(二) details 標籤參考資料
四、test.php(丁丁所寫)
- 用來研究新舊版本 mediawiki 的全域變數與相關物件之用。
- 把要研究的東西賽進 renderTest 函式中
- 去不錯學群/01/晨課/週三頁面觀察結果。
- 須要登入後,重按「編輯」與「儲存變更」,才會顯示新的結果。
五、sqlTbl.php(丁丁所寫)
- 把資料表以 select 指令,輸出為 wiki 表格
- 將參考 平台化討論.html 中 CSS .wikiInCell 類別的運用,改善表格內解析
- 參考 home.jendo.org 中 ET 類別 wiki 資料夾中 wikiInCell.php ,將表格內的列點 doBlockLevels 解析,並將#,*解析成對 .wikiInCell 適應的形式。
- 用平台化/簡表當作開發測試對象
六、projectSchedule.php(丁丁所寫)
- 外觀請參考 討論:「推動我國跨校選修平台」計畫書之「projectSchedule」段。
<projectSchedule> 年=第一年;第二年 第一年=幾月;幾月 第二年=幾月;幾月;幾月;幾月;幾月 項目=第一個工作項目;第二個工作項目;第三個工作項目;… 第一個工作項目=第幾年/幾月;第幾年/幾月;第幾年/幾月 第二個工作項目=第幾年/幾月;第幾年/幾月;第幾年/幾月 第三個工作項目=第幾年/幾月;第幾年/幾月;第幾年/幾月 列高=…(預設25) 項目寬=…(預設130) 月份寬=…(預設42) … </projectSchedule>
可用屬性:
- font-family=字體(預設標楷體)
- font-size=字體大小(預設10pt)
- background=著色的色碼或顏色名稱(預設#aaccf2)
七、projectBudget.php(丁丁所寫)
- 外觀請參參考 討論:「推動我國跨校選修平台」計畫書之「projectBudget」段。
- 使用 DS218+ 上面 wiki 資料庫的「計畫經費」表,由「專案名稱」欄控制。
<projectBudget> 專案名稱=○○○○○○○○○○ 計畫期程=□□□年□□月□□日至□□□年□□月□□日 列高=…(預設20) </projectBudget>
可用屬性:
- tWidth=預算表寬度(預設510pt,印出為 18cm )
- font-family=字體(預設標楷體)
- font-size=字體大小(預設10pt)
- background=著色的色碼或顏色名稱(預設#f2f0aa)