prestashop代码讲解之class/module.php,还有新模块示例
九 14
很多童鞋要开始自己尝试写一个新的module了,但是发现所有的module都是从这个module类上面扩展的,这里就给大家讲解一下class/module.php这个module的基类
这个类是一个基类,自己不能被初始化,必须被扩展
abstract class ModuleORM的理论,一个类就是一个当前module对象,有自己的id等参数,也有自己的install、uninstall等方法
public $id = NULL; ...
构造函数,有一个参数就是本module的名字,这个函数功能就是初始化,把一个名字变成一个真正的对象
public function __construct()
仅仅是数据库操作而已,童鞋在写新module的时候,可以在这里面调用添加数据库等语句完成个性的安装和卸载操作
public function install() public function uninstall()
hook在哪里?也仅仅是数据库操作而已,这些一般不在自定义module中使用
public function registerHook($hook_name) public function unregisterHook($hook_id)
表单上的小旗,为了多语言准备的
public function displayFlags
这是错误信息,就像要求你输入paypal或者google的帐号的那种,显示在modules首页的那个,这些一般不在自定义module中使用
public function unregisterExceptions($hook_id) public function registerExceptions($id_hook, $excepts) public function editExceptions($id_hook, $excepts) public function displayError($error)//这个和displayConfirmation是格式化配置里面返回的信息的,比如设置成功之类的 public function displayConfirmation($string) public function getExceptions($id_hook)
设计模式中的单例模式,返回一个单例
static public function getInstanceByName($moduleName) static public function getInstanceById($id_module)
这是显示后台那个列表的
public static function getModulesOnDisk() public static function getModulesDirOnDisk() public static function getModulesInstalled($position = 0)
在前台经常可以看到这个,执行hook在某部份的所有module,其实就是从数据库里读取一下然后执行而已
public static function hookExec($hook_name, $hookArgs = array(), $id_module = NULL)
支付的执行,支付虽然也是modules的一部分,但是是比较特殊的一部分
public static function hookExecPayment()
翻译,我会单独写一篇关于prestashop翻译过程的文章
public function l($string, $specific = false)
hook中的排序
public function updatePosition($id_hook, $way, $position = NULL) public function cleanPositions($id_hook) public function getPosition($id_hook)
显示,自定义的module中经常要扩展的
public static function display($file, $template)
验证是否是一个module
public static function isInstalled($moduleName)
下面,我做一个module的示例,这个示例的名字叫examplemodule,这个module可以在页面指定位置显示一些静态文字
新建一个examplemodule文件夹在modules目录下面,这个文件中要包含examplemodule.php,examplemodule.tpl(如果需要输出),logo.gif
打开examplemodule.php,写
<?php class ExampleModule extends Module { private $_html;//有的模块有配置的页面,那个页面的html都在这个变量里面 public function __construct() { $this->name = 'examplemodule';//名字必须和文件夹名一样 $this->tab = 'Blocks';//属于Blocks分类下面的 $this->version = 1.1;//版本,随便写 parent::__construct();//这个一定要有,而且必须在上面那些的下面,__construct里面的内容顺序不能改 $this->displayName = $this->l('我是新的示例模块');//名字,显示在外面的 $this->description = $this->l('这个module可以在页面指定位置显示一些静态文字');//说明 } function install() { if (!parent::install()) return false; return $this->registerHook('LeftColumn'); } function getContent()//有这个,就有配置那个链接 { $this->_html = '<h2>'.$this->displayName.'</h2>'; if (isset($_POST['content'])){ Configuration::updateValue('EXAMPLE_MODULE', $_POST['content']); $this->_html .= $this->displayConfirmation('成功保存'); } $this->_displayForm(); return $this->_html; } private function _displayForm()//表单 { global $cookie; $this->_html .= '<form action="'.$_SERVER['REQUEST_URI'].'" method="post"> <fieldset> <legend>配置</legend> <p>内容:<input type="text" name="content" value="'.Configuration::get('EXAMPLE_MODULE').'"></p> <p><input type="submit" name="btnSubmit" class="button" value="'.$this->l('确定').'"></p> </fieldset> </form>'; } function hookLeftColumn($params)//hook在左边 { global $smarty; $smarty->assign('html', Configuration::get('EXAMPLE_MODULE')); return $this->display(__FILE__, 'examplemodule.tpl'); } function hookRightColumn($params)//hook在右边,和左边一样,直接执行左边的内容 { return $this->hookLeftColumn($params); } }//注意这里没有php的结束符?>,是因为安全性。这样怎么就安全了呢?想不明白来信问我把,哈哈
打开examplemodule.php,写
<p>{$html}</p>最后,别忘了保存成utf8的编码
RSS
十二 08, 2009 @ 15:15:34
支持博主的共享精神,也非常感谢你的细心付出和贡献!通过你的教程一步一步了解了prestashop。
这里指出一个小错误噢:
文章最后:“打开examplemodule.php,写”应该是打开examplemodule.tpl吧~
见笑了~
期待下文~!~
一 06, 2010 @ 23:18:48
谢谢更正,是我错了
三 24, 2010 @ 19:31:01
来过了,博客不错,赞!!
七 02, 2010 @ 21:29:47
thanks