php 自定义模板标签,ThinkPHP5 自定义模板标签

最近在使用ThinkPHP5 写项目,项目中涉及到权限管理,如果用户没有这个权限,就不显示这个div。在全局封装好了一个函数

check_permission($permission_key): bool{}

在view.html里面书写的话 需要这么写

{if check_permission('order-delivery')}

订单发货

{/if}

想换一种思路实现以上代码,于是自己研究了一下模板标签拓展,拓展类库如下:

class HasPermission extends TagLib

{

protected $tags = [

//闭合标签,默认为不闭合

'open' => ['attr' => 'key', 'close' => 0],

'close' => ['attr' => 'key', 'close' => 1],

];

public function tagClose($tag, $content)

{

$parse = '<?php if (has_permission("' . $tag['key']

. '")) {?>' . $content . '<?php } ?>';

return $parse;

}

}

需要在/config/template.php中的taglib_pre_load中加入HasPermission

use app\index\taglib\HasPermission;

return [

// 模板引擎类型 支持 php think 支持扩展

'type' => 'Think',

// 模板路径

'view_path' => '',

// 模板后缀

'view_suffix' => 'html',

// 模板文件名分隔符

'view_depr' => DIRECTORY_SEPARATOR,

// 模板引擎普通标签开始标记

'tpl_begin' => '{',

// 模板引擎普通标签结束标记

'tpl_end' => '}',

// 标签库标签开始标记

'taglib_begin' => '{',

// 标签库标签结束标记

'taglib_end' => '}',

'tpl_replace_string' => [

// 静态文件路径

'__STATIC__' => '/static',

'__JS__' => '/static/javascript',

],

'taglib_pre_load' => implode(',', [

HasPermission::class,

]),

];

这里我要吐槽一下ThinkPHP5的设计,为什么taglib_pre_load 是一个逗号分隔开的字符串,而不是优雅的数组

在view.html中实现这个方法示例:

{haspermission:close key="order-delivery"}

订单发货

{/haspermission:close}

写完之后发现,其实好像没少写多少代码,笑。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ThinkPHP5是一款基于PHP的开源框架,它提供了许多方便的功能来简化开发过程。其中,paginate是ThinkPHP5框架自带的一个用于分页的方法。 paginate方法用于在查询结果中进行分页,以便在网页上展示数据。使用paginate方法,可以非常方便地实现数据的分页显示,并且框架会自动处理分页链接的生成和点击。 在使用paginate方法时,我们可以根据自己的需求进行自定义,以便满足特定的分页需求。具体的自定义方法如下: 首先,我们需要在模型文件中添加paginate方法的自定义配置。在模型文件中找到paginate方法,可以看到其实际上调用了系统的paginate方法。我们可以在模型文件中添加自定义配置,如: ```php public function paginate($listRows = 15, $simple = false, $config = []) { // 自定义分页配置 $config['query'] = request()->param(); $config['type'] = 'app\common\paginator\Bootstrap'; return parent::paginate($listRows, $simple, $config); } ``` 在上述代码中,我们可以看到对paginate方法进行了扩展,添加了$query和$type配置项。其中,$query用于保留当前页面的查询条件,而$type用于指定分页类的命名空间。我们可以根据自己的需求进行相应的配置。 接下来,在视图文件中生成分页链接时,我们可以通过自定义模板来实现样式的自定义ThinkPHP5框架提供了内置的Bootstrap模板,在生成分页链接时可以指定使用该模板。具体的代码如下: ```php $paginate->render('app\common\paginator\Bootstrap'); ``` 在上述代码中,我们可以看到通过render方法指定了使用的分页模板。我们可以根据自己的需求指定其他模板,并进行样式的自定义。 综上所述,通过自定义paginate方法的配置和分页模板的选择,我们可以对ThinkPHP5框架中的paginate进行自定义,以便满足特定的分页需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值