rpcms不仅插件可以使用钩子来丰富功能,同样的,模板也可以使用钩子,设计这个的初衷就是尽量避免用户安装N多的插件,增加管理上的难度。
当然,模板主题究竟是模板,所以在功能上多多少少不如插件使用的方便,也有那么一丝丝的追求数据分离的概念。
总体来说,插件可以使用的钩子,模板中同样可以使用,唯一的区别就是模板的扩展功能不可以通过URL访问,而插件就不一样了,可以直接通过URL访问到插件。
《帮助文档》中有说明模板钩子的使用,但估计同学们看着有点懵懵的(原谅管理员吧),这里系统的写一下,手把手的教会你。
准备工作:
模板中使用钩子,首先得有模板吧(虽然是废话),然后在模板文件夹中建一个Hook.class.php的文件
此处说明一下,模板钩子的使用需要开发者有PHP的基础,因为这里涉及到了逻辑交互。。。
开始码:
rpcms逻辑操作文件都遵循PSR规范,使用空间命名自动加载机制。
DEMO:
<?php namespace templates\index\defaults; //defaults代表模板文件夹的名称 class Hook{ public function addHook(){ $data=array( 'admin_top_menu'=>'templates\index\defaults\Hook::addAdminMenu', ); return $data; } public function addAdminMenu(){ echo '<li class="top_item"><a href="'.url('index/index').'">后台右上方按钮</a></li>'; } }
进阶使用:
到现在你应该会使用模板钩子了吧,上面的demo是不是感觉没啥大用处,No,那是先让你了解模板钩子的使用。下面升级了,跟上
在模板中加入逻辑操作,推荐在模板文件夹中新建一个lib文件夹(随便怎么命名吧,你喜欢就行),这里演示创建一个Data.lib.php文件
在lib文件夹中创建文件Data.lib.php(推荐使用.lib.php后缀格式,.class.php一般应用于MOD)
命名规范可参考《关于模板/插件的命名》
DEMO:
<?php namespace templates\index\defaults\lib; use rp\Db; //引入DB数据库,可以对数据库进行操作 use rp\View; //引入视图模型 class Data{ public function index(){ /* * *这里可以是您的业务逻辑代码 * */ //模板变量赋值 View::assign('name','rpcms'); //模板输出 return View::display('/index'); } }
终极教程:
到这里想必你已经了解模板钩子和辅助逻辑文件了吧,那么下面把这两个功能组合到一起使用
Hook文件:
<?php namespace templates\index\defaults; //defaults代表模板文件夹的名称 class Hook{ public function addHook(){ $data=array( 'admin_logs_edit_hook3'=>'templates\index\defaults\Hook::logExtend', 'admin_logs_save'=>'templates\index\defaults\Hook::logSave', ); return $data; } public function logExtend(){ echo '<div class="me_input big"> <label style="width: auto;">扩展数据1</label> <input type="number" name="extend_data1" value="'.(isset($logData['extend']['data1']) ? $logData['extend']['data1'] : '').'"> </div>'; } public function logSave($id){ (new templates\index\defaults\lib\data)->updateExtend($id); } }
Data文件:
<?php namespace templates\index\defaults\lib; use rp\Db; class Data{ public function updateExtend($id){ /* *可以进行其他业务逻辑操作 */ $log=Db::name('logs')->where(['id'=>$id])->find(); $extend=json_decode($log['extend'],true); $extend['data1'].='追加内容'; Db::name('logs')->where(['id'=>$id])->update(array( 'extend'=>json_encode($extend) )); } }
发表评论
评论已关闭,请移步论坛发表,立即前往