pixmicat

Subversion Repositories:
Compare Path: Rev
With Path: Rev
/PIO/ @ 854  →  /PIO/ @ 855
/PIO/TestCase/PMSTest.php
@@ -1,6 +1,5 @@
<?php
require_once dirname(__FILE__).'/prerequire.php';
require_once ROOTPATH.'lib/lib_compatible.php';
 
class PMSTest extends PHPUnit_Framework_TestCase {
public $PMS;
/PIO/lib/interfaces.php
@@ -349,4 +349,23 @@
* @return mixed 方法執行的結果
*/
public function invoke(array $callable, array $args);
}
 
/**
* IModule
*/
interface IModule {
/**
* 回傳模組名稱方法
*
* @return string 模組名稱。建議回傳格式: mod_xxx : 簡短註解
*/
public function getModuleName();
 
/**
* 回傳模組版本號方法
*
* @return string 模組版本號
*/
public function getModuleVersionInfo();
}
/PIO/lib/lib_pms.php
@@ -3,7 +3,7 @@
* Pixmicat! Module System
*
* 增加掛載點供函式掛上並在需要時依序呼叫以動態改變內容或達成各種效果
*
*
* @package PMCLibrary
* @version $Id$
* @date $Date$
@@ -128,4 +128,81 @@
if(isset($this->CHPList[$CHPName])) $this->useModuleMethods($CHPName, $parameter);
}
}
?>
 
/**
* ModuleHelper
* 預先取得 PMS 常用功能方便呼叫
*/
abstract class ModuleHelper implements IModule {
protected static $PMS;
private $clazz;
 
public abstract function getModuleName();
public abstract function getModuleVersionInfo();
 
protected function __construct($PMS) {
// 儲存 $PMS 參考
if (self::$PMS == null) {
self::$PMS = $PMS;
}
$this->clazz = get_class($this);
 
// 自動註冊模組頁面
if (method_exists($this, 'ModulePage')) {
$PMS->hookModuleMethod('ModulePage', $this->clazz);
}
}
 
/**
* moduleName 建構器,協助組合出一致的模組名稱
*
* @param string $description 模組簡易用途說明
* @return string 格式化模組名稱
*/
protected function moduleNameBuilder($description) {
return "{$this->clazz} : $description";
}
 
/**
* 回傳模組獨立頁面 URL,並協助建立查詢參數
*
* @param array $params URL 參數鍵值表
* @return string 模組獨立頁面 URL
* @see http_build_query()
*/
protected function getModulePageURL(array $params = array()) {
$query = count($params) != 0 ?
'&amp;'.http_build_query($params, '', '&amp;') : '';
return self::$PMS->getModulePageURL($this->clazz).$query;
}
 
/**
* 將模組方法掛載於特定掛載點
*
* @param string $hookPoint 掛載點名稱
* @param callable $methodObject 可執行函式
*/
protected function hookModuleMethod($hookPoint, $methodObject) {
self::$PMS->hookModuleMethod($hookPoint, $methodObject);
}
 
/**
* 新增自訂掛載點
*
* @param string $chpName 自訂掛載點名稱
* @param callable $callable 可執行函式
*/
protected function addCHP($chpName, $callable) {
self::$PMS->addCHP($chpName, $callable);
}
 
/**
* 呼叫自訂掛載點
*
* @param string $chpName 自訂掛載點名稱
* @param array $params 函式參數
*/
protected function callCHP($chpName, array $params) {
self::$PMS->callCHP($chpName, $params);
}
}