首页 > 模板开发 > 正文

模板制作-模板钩子的使用

  • 更新时间:2024-04-25 11:19:44
  • 1691阅读
  • 0评论

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)
        ));
    }
    
}


发表评论

评论已关闭,请移步论坛发表,立即前往

0 位网友评论:

Top