thinkphp 自定义标签

关于标签的个人理解是 拼凑php 字符串 通过eval()来进行,返回数据。过程应该是这样的,在模板中加入 定义标签为<mytag:list></mytag>,那么在mvc 中解析模板的时候,用正则来匹配 该标签,如果发现符合的标签 就去 寻找mytag 这个类,并实例 调用这个类下的 list方法 进行逻辑运算 返回数据。

 

在thinkphp 中扩展 自定义标签

下面以输出 面包屑 为例:

参照官方内置 标签类写法。在任何地方 建一个你的标签类,我这里是 放在Home\Mytag文件夹下 文件名 : 类名+class.php

这里以 Crumb.class.php 为例:

<?php
namespace Home\Mytag;//在thinkphp 中自定义标签类 一定要用命名空间 否则,thinkphp无法找到该类
use Think\Template\TagLib;

class Crumb extends TagLib{
    protected $tags   =  array(
        "show"    =>  array()
        
    );
    
    public function _show()
    {
    $str = ' <?php ';
    $str .= ' echo "哈哈哈哈哈哈"; ';
    $str .= ' ?> ';
    return $str;
  }
}

  上面已经把自定义标签最基本的类定义好了,现在只要在需要用到该标签 地址引入该标签,即可,在使用该标签<Crumb:show></Crumb:show> 之前一定要先引入该标签类再调用 自定义标签。引入代码如下:

<taglib name="Home\Mytag\Crumb"/>{/* 这是加载需要需要的自定义标签类 */}
<Crumb:show></Crumb:show>{/* 调用自定义标签 */}

  如果这个标签需要接受参数传入,案例如下:

namespace Home\Mytag;
use Think\Template\TagLib;

class Crumb extends TagLib{
    protected $tags   =  array(
        "show"    =>  array('attr'=>'cateid')
        
    );
    //如果需要通过属性 方式传值进来,一定要先在这里 定义好,否则不能正常运行。$content 这个不用定义,只要在标签对之间输入 就可以在这里类中获取到
    public function _show($tag,$content)
    {
        $str = ' <?php ';
        $cateid = $tag['cateid'] ;
        //这里进行 自己逻辑运行,输出内容,到一个 变量中,然后return 即可
        $str .=' echo "'.'<li><a href=\"#\">首页</a></li><li><a href=\"#\">新闻资讯</a></li><li class=\"active\">这是一篇新的资讯</li>'.'"; ';

        //$str .= ' echo "通过属性传进来的:'."$cateid".'传进来的 内容;'."$content".'";' ;
        $str .= ' ?> ';
        return $str;
    }
}

  传参数调用这个标签 如下:

<taglib name="Home\Mytag\Crumb"/>
<Crumb:show cateid="44">这里是的内容可以传给$content变量</Crumb:show>

  运行效果如下:

posted @ 2016-06-14 11:34  小蜂鸟  阅读(931)  评论(0编辑  收藏  举报