1.定义TagLib目录和文件  TagLibSmarTop.class.php

2.配置文件

<?php
return array(
'APP_AUTOLOAD_PATH'=>'@.TagLib', //TagLib的位置 @.表示当前文件夹下
'TAGLIB_BUILD_IN'=>'Cx,SmarTop' //Cx是thinkphp基础类库的名称必须引用否则volist等标签就无法使用,SmarTop是自己定义的标签名称
);
?>

3.定义标签

     class TagLibSmarTop extends TagLib{
protected $tags = array(
//nav定义字段 attr 定义属性 close 是否是闭合
'nav' => array('attr'=>'limit,order','close'=>1),
'child' =>array('attr'=>'limit,order,typeid','close'=>1),
'navnav' =>array('attr'=>'limit,order,typeid','close'=>1),
);
/**
*定义标签
*@param $attr array 接受的属性
*@param $content string 接受的字符串
*@return $str 返回字符串
*/
public function _nav($attr,$content){
$tag = $this->parseXmlAttr($attr,$content);
$Cate = D('cate');
$result =$Cate->sortChildCate($Cate->order($tag['order'])->limit($tag['limit'])->select());
$str = '';
foreach($result as $k=>$v){
//使用str_replace()函数进行对字符串的替换
$str .=str_replace(array('[field:id]','[field:typename]'),array($result[$k]['id'],$result[$k]['name']),$content);
}
return $str;
}
/**
*定义标签 功能待开发只限于2级栏目调用
*@param $attr array 接受的属性
*@param $content string 接受的字符串
*@return $str 返回字符串
*/
public function _child($attr,$content){
$tag = $this->parseXmlAttr($attr,$content);
$Cate = D('cate');
$where = array('pid'=>empty($tag['typeid'])?0:$tag['typeid']);
$result =$Cate->where($where)->order($tag['order'])->limit($tag['limit'])->select();
$str = '';
foreach($result as $k=>$v){
//使用str_replace()函数进行对字符串的替换
$str .=str_replace(array('[field:id]','[field:name]'),array($v['id'],$v['name']),$content);
}
return $str;
}
public function _navnav($attr,$content){
$tag= $this->parseXmlAttr($attr,$content);
//使用php代码以字符串的形式返回到模板里面 要以单引号括起来
$str ='<?php ';
$str .= '$Cate = M("cate");';
$str .= '$_result = cateModel::sortChildCate($Cate->select());';
$str .='foreach($_result as $__CateNav):';
$str .='extract($__CateNav);?>';  //将数组的$.__CateNav[]去掉
$str .= $content;
$str .= '<?php endforeach?>';
return $str;
}
}

4.模板使用标签

       <navnav limit ='20'  order='id ASC'>
<li class='nav-lv1-li'>
<a href="" class='top-cate'>{$name}</a>
<ul>
<foreach item='value' name="child">
<li><a href="">{$value.name}</a></li>
</foreach>
</ul>
</li>
</navnav>
             <nav limit ='20'  order='id ASC'>
<li class='nav-lv1-li'>
<a href="" class='top-cate'>[field:typename]</a>
<ul>
<child limit ='20' order='id ASC' typeid="[field:id]">
<li><a href="">[field:name]</a></li>
</child>
</ul>
</li>
</nav>

Thinkphp自定义标签的更多相关文章

  1. thinkphp自定义标签库

    thinkphp ~ php中 的类, 的成员变量, 本身是没有类型说明的, 那么我怎么知道它的类型呢? 或初始值呢? 通常在类定义中, 如果能给一个初始值的(对于已知简单类型的),最好给一个初始值, ...

  2. thinkphp 自定义标签

    关于标签的个人理解是 拼凑php 字符串 通过eval()来进行,返回数据.过程应该是这样的,在模板中加入 定义标签为<mytag:list></mytag>,那么在mvc 中 ...

  3. ThinkPHP - 自定义标签库 - 标签驱动

    ThinkPHP 官方文档:http://document.thinkphp.cn/manual_3_2/taglib_driver.html 创建一个类,继承自TagLib类: <?php / ...

  4. (转)ThinkPHP自定义标签

    第一:在当前应用下的Conf文件夹中config.php加两个配制项:             'TAGLIB_LOAD' => true,//加载标签库打开             'APP_ ...

  5. (转) ThinkPHP模板自定义标签使用方法

    这篇文章主要介绍了ThinkPHP模板自定义标签使用方法,需要的朋友可以参考下  转之--http://www.jb51.net/article/51584.htm   使用模板标签可以让网站前台开发 ...

  6. (转)ThinkPHP自定义模板标签详解

    转之--http://www.thinkphp.cn/topic/6258.html 模板标签让网站前台开发更加快速和简单,这让本该由程序猿才能完成的工作,现在只要稍懂得HTM的人也能轻易做到,这也就 ...

  7. ThinkPHP3.2.3 自定义标签库的使用

    ThinkPHP 3.2.3 手册中标签库驱动的地址是: http://www.kancloud.cn/manual/thinkphp/1859 标签库的地址是:http://www.kancloud ...

  8. [JSP]自定义标签库taglib

    自定义标签的步骤 自定义标签的步骤大概有三步: 1.继承javax.servlet.jsp.tagext.*下提供的几个标签类,如Tag.TagSupport.BodyTagSupport.Simpl ...

  9. [Java] JSP笔记 - 自定义标签

    自定义标签的创建步骤: 自定义标签的四大功能: 自定义标签的类结构: 在 1.0 中呢, 可以将 <body-content> 的值设置为 JSP, 2.0中则不允许在自定义标签体中出现j ...

随机推荐

  1. python 模块基础 和常用的模块

    模块的定义 一个模块就是以.py结尾的python 文件,用来从逻辑上组织python代码.注意,模块名和变量名一样开头不能用数字,可以是双下划线和字母. 为什么要用模块? 将一些复杂的需要重复使用的 ...

  2. React-native-camera error with Expo: undefined is not an object (evaluating 'CameraManager.Aspect')

    React-native-camera error with Expo: undefined is not an object (evaluating 'CameraManager.Aspect') ...

  3. threejs 空间位置转为屏幕像素xy位置

    function createVector(x, y, z, camera, width, height) { var p = new THREE.Vector3(x, y, z); var vect ...

  4. Python之路PythonThread,第一篇,进程1

    python3 进程1 多任务编程: 可以有效的利用计算机资源,同时执行多个任务, 进程:进程就是程序在计算机中一次执行的结果: 进程和程序的区别: 程序是一个静态文件的描述,不占用计算机的系统资源: ...

  5. JavaBasic_09

    方法的参数传递 方法调用时参数值的传递可以分为"值传递"和"引用传递"两种 值传递 - a.当方法的参数为基本数据类型时 b.实参的值被复制给形参,改变形参不会 ...

  6. CodeForces - 1097F:Alex and a TV Show (bitset & 莫比乌斯容斥)

    Alex decided to try his luck in TV shows. He once went to the quiz named "What's That Word?!&qu ...

  7. Arcgis API本地化

    ①将API文件夹复制到该目录下C:\Program Files\ArcGIS\Server\framework\runtime\tomcat\webapps ②打开API文件夹中的init.js文件( ...

  8. 外部javascript

  9. MySql查询出来的值为 boolean类型的值

    解决方案: status_flag * 1 as status_flag 乘以1之后就不会是boolean类型的值了

  10. 2018.4.17 VFS

    总结: VFS只存在于内存中,它在系统启动时被创建,系统关闭时注销. VFS的作用就是屏蔽各类文件系统的差异,给用户.应用程序.甚至Linux其他管理模块提供统一的接口集合. 管理VFS数据结构的组成 ...