Thinkphp5.1 自定义标签(Taglib)

2019-05-16  本文已影响0人  呆鼠博客

在TP框架中,我们一般是在控制器定义变量,并将变量渲染到视图里输出。然而,本次要介绍的是用自定义标签输出变量。在进行cms开发中,前台页面的数据输出一般是靠自定义的标签,进行输出。
TP框架的视图工作流程:把控制器中定义的变量或者自定义标签的变量,渲染到页面模板;接着,TP框架会编译视图页面,把生成php文件放在项目下runtime\temp目录里(TP框架的运行文件);最后当用户访问时,调用运行文件里的php文件,显示到用户界面里。

自定义标签

1 、自定义的标签,一般是放在公共模块里,即在common模块下新建目录taglib(用存放自定义标签库);
2、在taglib目录下创建Demo.php继承app\common\taglib的TagLib类,代码如下:

<?php
namespace app\common\taglib;
use think\template\TagLib;
class Demo extends TagLib{
    /**
     * 定义标签列表
     */
    protected $tags   =  [
        /**标签定义
        * attr:属性列表
        * close:是否闭合(0表示闭合,1表示不闭合。默认值为1)
        * alias:标签别名
        * level:嵌套层次
        */
        'sitename'     => ['attr' => 'name', 'close' => 0],//闭合标签
        'keyword'      => ['attr' => 'key', 'close' => 1], //不闭合标签
        
    ];

    /**
     * 闭合标签
     * $tag:存放标签属性的数组
     */
    public function sitename($tag)
    {
        return '网站名称:'.$tag['name'];
    }
    
    /**
     * 不闭合标签
     * $tag:存放标签属性的数组
     * $content:标签内的数据
     */
    public function keyword($tag,$content)
    {
        return '网站关键词:'.$tag['key'].$content;
    }
}

如何使用自定义标签

首先,在使用标签前需要配置标签,不然无法使用,在TP 5.1项目中配置自定义的标签。

'taglib_build_in' => 'cx,app\common\taglib\Demo',

注意:cx是框架默认的标签库,配置的标签库必须添加命名空间。这种方法配置的标签库,在使用的时候不用添加标签的命名空间(即标签库名)。

例如,news标签

{news num='10'}{$titile}{/news}
'taglib_pre_load' => 'app\common\taglib\Demo',

注意:这种方法配置的标签库,在使用的时候需要添加标签的命名空间(即标签库名)。

其次,可以在模板文件里使用上面定义的标签,如下:
方法一的使用:

{sitename name='新浪微博'/}
{keyword key='新浪,微博'}
    我在关键词后面。
{/keyword}

方法二的使用:

{Demo:sitename name='新浪微博'/}
{Demo:keyword key='新浪,微博'}
    我在关键词后面。
{/Demo:keyword}
上一篇下一篇

猜你喜欢

热点阅读