码迷,mamicode.com
首页 > Web开发 > 详细

thinkphp 自定义标签

时间:2016-06-14 13:47:32      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:

关于标签的个人理解是 拼凑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>

  运行效果如下:

技术分享

thinkphp 自定义标签

标签:

原文地址:http://www.cnblogs.com/xiaobaidoit/p/5583488.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!