在 7th.Release 以前的模組,如果需要特別的操作都需要透過 $PMS 這個物件來下達。而在 7th.Release 程式預設不會產生 $PMS 等全域物件,因此開發者得自行在建構元時抓取。這在撰寫的時候多少有點不方便。這個 ModuleHelper 抽象物件嘗試解決這些不便,將以往直接對 $PMS 的要求封裝後轉移到物件本身,繼承 ModuleHelper 的模組自己呼叫自己已有的方法就可以達成,會方便許多。
由於這是一個實作 IModule 介面的抽象物件,因此 IModule 裡定義的方法仍然要自行實作。
繼承的好處有三:
- 可以不需要手動呼叫 PMS 處理大部分的事情
- ModulePage 模組頁面掛載點不必再手動註冊掛載,ModuleHelper 會自動處理
- 提供一些幫助函式讓建構更方便
Table of Contents
|
規格版本
- 7th.Release
引用
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 - 模組簡易用途說明
回傳值: 格式化模組名稱
public function getModuleName() { return $this->moduleNameBuilder('還沒想到要做什麼'); // return: mod_XXX : 還沒想到要做什麼 }
getModulePageURL
protected string function getModulePageURL(array $params = array())
(封裝 PMS->getModulePageURL) 回傳模組獨立頁面 URL,並協助建立查詢參數。
參數:
$params - URL 參數鍵值表
回傳值: 模組獨立頁面 URL
$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 - 備用語系
$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 - 變數
回傳值: 翻譯後之字串
echo $this->_T('not_found'); // 等同於 _T(__CLASS__.'_not_found');
預覽網頁:
關閉預覽