ModuleHelper 抽象物件

在 7th.Release 以前的模組,如果需要特別的操作都需要透過 $PMS 這個物件來下達。而在 7th.Release 程式預設不會產生 $PMS 等全域物件,因此開發者得自行在建構元時抓取。這在撰寫的時候多少有點不方便。這個 ModuleHelper 抽象物件嘗試解決這些不便,將以往直接對 $PMS 的要求封裝後轉移到物件本身,繼承 ModuleHelper 的模組自己呼叫自己已有的方法就可以達成,會方便許多。

由於這是一個實作 IModule 介面的抽象物件,因此 IModule 裡定義的方法仍然要自行實作。

繼承的好處有三:

  1. 可以不需要手動呼叫 PMS 處理大部分的事情
  2. ModulePage 模組頁面掛載點不必再手動註冊掛載,ModuleHelper 會自動處理
  3. 提供一些幫助函式讓建構更方便

規格版本

  • 7th.Release

引用

<?php
class ModuleHelper implements IModule {
    // ...
}
 
class mod_helloworld extends ModuleHelper {
    public function __construct($PMS) {
        parent::__construct($PMS);
        // ...
    }
 
    // ...
}
?>

屬性

PMS

protected static $PMS;

PMS 函式庫本身。繼承的模組可以透過 self::$PMS 的方式存取到。

方法

__construct

public void function __construct(PMS $PMS)

建構元。繼承的模組建構元中的第一行一定得是 parent::__construct($PMS);。這樣運作才會正常。
另外,在建構元時會自動判斷模組是否有 ModulePage 方法,並將其掛載到模組頁面上。因此繼承的模組不須再手動註冊。

參數:
$PMS - PMS 函式庫參考

moduleNameBuilder

protected string function moduleNameBuilder(string $description)

moduleName 建構器,協助組合出一致的模組名稱。

參數:
$description - 模組簡易用途說明
回傳值: 格式化模組名稱

<?php
public function getModuleName() {
    return $this->moduleNameBuilder('還沒想到要做什麼');
    // return: mod_XXX : 還沒想到要做什麼
}
?>

getModulePageURL

protected string function getModulePageURL(array $params = array())

(封裝 PMS->getModulePageURL) 回傳模組獨立頁面 URL,並協助建立查詢參數。

參數:
$params - URL 參數鍵值表
回傳值: 模組獨立頁面 URL

<?php
$URL = $this->getModulePageURL(
    array(
        'func' => 'sayhello',
        'number' => 41
    )
);
// "pixmicat.php?mode=module&load=mod_xxx&func=sayhello&number=41"
 
$URLNoQuery = $this->getModulePageURL();
// "pixmicat.php?mode=module&load=mod_xxx
?>

hookModuleMethod

protected void function hookModuleMethod(string $hookPoint, callable $methodObject)

(封裝 PMS->hookModuleMethod) 將模組方法掛載於特定掛載點。通常開發者都使用 auto 開頭的方法來自動掛載,因此此方法很少會被用到。

參數:
$hookPoint - 掛載點名稱
$methodObject - 可執行函式

addCHP

protected void function addCHP(string $chpName, callable $callable)

(封裝 PMS->addCHP) 新增自訂掛載點。

參數:
$chpName - 自訂掛載點名稱
$callable - 可執行函式

callCHP

protected void function callCHP(string $chpName, array $params)

(封裝 PMS->callCHP) 呼叫自訂掛載點。

參數:
$chpName - 自訂掛載點名稱
$params - 函式參數

attachLanguage

protected void function attachLanguage(array $lang, string $fallbackLang = 'en_US')

(封裝 LanguageLoader->attachLanguage) 附加翻譯資源字串。
語言資源的索引鍵不必再加上識別前綴,系統內部會自動加上模組類別名以辨別。舉例來說,not_found 在內部會變成 mod_dummy_not_found,避免和其他語言資源衝突。
備用語系可以指定當系統使用未定義的語言時,模組該以哪個做為備用語系顯示。預設是 en_US。

參數:
$lang - 翻譯資源字串陣列
$fallbackLang - 備用語系

<?php
$this->attachLanguage(
    array(
        'zh_TW' => array(
            'not_found' => '找不到,你確定有輸入對嗎?',
            'GJ' => '幹的好'
        ),
        'en_US' => array(
            'not_found' => 'Not Found. Please check again.',
            'GJ' => 'Good Job'
        )
    )
, 'en_US');
?>

_T

protected string function _T(string $langstrid, [mixed …])

(封裝 LanguageLoader->getTranslation) 取得指定項目之翻譯,並進行變數字串的替代。
語言資源的索引鍵不必再加上識別前綴,系統內部會自動加上模組類別名以辨別。舉例來說,not_found 在內部會變成 mod_dummy_not_found,避免和其他語言資源衝突。

參數:
$langstrid - 翻譯資源索引字
$args - 變數
回傳值: 翻譯後之字串

<?php
echo $this->_T('not_found');
// 等同於 _T(__CLASS__.'_not_found');
?>

參見

討論

新增一則回應
登入為 Wikidot 使用者
(將不會發佈)
- +
除非特別註明,本頁內容採用以下授權方式: Creative Commons Attribution-Noncommercial-Share Alike 2.5 License.