Manual:Parser functions/zh

在MediaWiki 1.7中添加的解析器函數是一種與解析器緊密集成的擴展. The phrase "parser function" should not be confused with, which is a collection of simple parser functions. (See for those.)

描述
雖然標籤擴展需要獲取未處理的文本並將超文本標記語言返回給瀏覽器，但解析器函數可以與頁面中的其他wiki元素“交互”. 例如，解析器函數的輸出可以用作模板參數或構造鏈接.

解析器函數的典型語法是：

有關更多信息，請參閱的. 本文檔說明：
 * 回調函數應具有以下形式：
 * 或者和或者 :
 * 或者和或者 :

創建解析器函數比創建新標記稍微複雜一些，因為函數名稱必須是魔術字，這是一個支持別名和本地化的關鍵字.

简单例子
下面是一個創建解析器函數的擴展示例.

註冊分別進入extension.json和src/ExampleExtensionHooks.php：

擴展目錄（不在src/子目錄中）的另一個文件ExampleExtension.i18n.php應該包含：

啟用此擴展程序後，



生产：


 * param1 is hello and param2 is hi and param3 is hey

较长的函数
對於更長的函數，您可能希望將鉤子函數拆分為_body.php或.hooks.php文件，並使它們成為類的靜態函數. 然後你可以用加載類並在鉤子中調用靜態函數; 例如. ：

把它放在你的 文件中： 然後把它放在你的 文件中：
 * 請參閱：編寫事件處理程序以獲取其他樣式.

缓存
與標記擴展名一樣，$parser->disableCache可用於禁用動態擴展的緩存. This has a significant negative impact on performance, so only use when necessary.

控制輸出的解析
要使解析器函數返回的wiki文本得到完全解析（包括擴展模板），請在返回時將 選項設置為false：

至少在某些情況下，有時是1.12版本左右，似乎 的默認值從false變為true.

相反，要使您的解析器函數返回仍未解析的超文本標記語言，而不是返回wiki文本，請使用以下命令：

然而， 例如This is a test. 會產生這樣的東西：

This is

參數1是哈囉，參數2是嗨，參數3是測試.

這是由於解析器函數的超文本標記語言輸出之前的硬編碼“\n\n”而發生的. 為避免這種情況並確保超文本標記語言代碼內嵌到周圍文本，您可以使用：

命名
默認情況下，MW會在每個解析器函數的名稱中添加一個哈希字符（數字符號，“#”）. 要禁止添加（並獲得沒有“#”前綴的解析器函數）， 在setFunctionHook的可選flags參數中添上''SFH_NO_HASH'常量，如下邊所述.

在選擇沒有哈希前綴的名稱時，請注意，不再可能刪除名稱以該函數名稱開頭後跟冒號的頁面. 特別是，避免使用等於命名空間名稱的函數名稱. 在啟用interwiki transclusion 的情況下，還要避免使用等於interwiki前綴的函數名稱.

setFunctionHook掛鉤
有關解析器接口的更多詳細信息，請參閱includes/Parser.php.中setFunctionHook的文檔. 這是這些評論的副本（可能是註明日期）：

function setFunctionHook( $id, $callback, $flags = 0 ) 参数：


 * string $id - 魔術字標識符
 * mixed $callback - 要使用的回調函數（和對象）
 * integer $flags - 可選，將其設置為SFH_NO_HASH常量，以調用不帶“#”的函數.

返回值：此名稱的舊回調函數（如果有）

創建一個函數，例如. 回調函數應具有以下形式：

回調可以返回函數的文本結果，也可以返回帶有文本的數組 在元素0中，以及其他元素中的許多標誌. 標誌的名稱是 在鍵中指定. 有效標誌是：


 * found : 返回的文本有效，停止處理模板. 默認情況下啟用此選項.
 * nowiki : 應該轉義返回值中的Wiki標記
 * noparse : 不應剝離不安全的HTML標籤等.
 * noargs : 不要在返回值中替換三重括號參數
 * isHTML : 返回的文本是HTML，裝備它反對wikitext轉換

命名參數
解析器函數不像模板和標記擴展那樣支持命名參數，但偶爾會偽造它. 用戶通常習慣使用豎線（|）來分隔參數，因此能夠在解析器函數上下文中做到這一點也很好. 以下是如何完成此操作的簡單示例：

参见

 * ParserFunctions擴展是一個眾所周知的解析器函數集合.
 * The Parser Hooks PHP library, which provides an object orientated interface for declarative parser hooks
 * ParserFunctions擴展是一個眾所周知的解析器函數集合.
 * The Parser Hooks PHP library, which provides an object orientated interface for declarative parser hooks
 * ParserFunctions擴展是一個眾所周知的解析器函數集合.
 * The Parser Hooks PHP library, which provides an object orientated interface for declarative parser hooks
 * ParserFunctions擴展是一個眾所周知的解析器函數集合.
 * The Parser Hooks PHP library, which provides an object orientated interface for declarative parser hooks
 * The Parser Hooks PHP library, which provides an object orientated interface for declarative parser hooks