Thinkphp自定义标签
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自定义标签的更多相关文章
- thinkphp自定义标签库
thinkphp ~ php中 的类, 的成员变量, 本身是没有类型说明的, 那么我怎么知道它的类型呢? 或初始值呢? 通常在类定义中, 如果能给一个初始值的(对于已知简单类型的),最好给一个初始值, ...
- thinkphp 自定义标签
关于标签的个人理解是 拼凑php 字符串 通过eval()来进行,返回数据.过程应该是这样的,在模板中加入 定义标签为<mytag:list></mytag>,那么在mvc 中 ...
- ThinkPHP - 自定义标签库 - 标签驱动
ThinkPHP 官方文档:http://document.thinkphp.cn/manual_3_2/taglib_driver.html 创建一个类,继承自TagLib类: <?php / ...
- (转)ThinkPHP自定义标签
第一:在当前应用下的Conf文件夹中config.php加两个配制项: 'TAGLIB_LOAD' => true,//加载标签库打开 'APP_ ...
- (转) ThinkPHP模板自定义标签使用方法
这篇文章主要介绍了ThinkPHP模板自定义标签使用方法,需要的朋友可以参考下 转之--http://www.jb51.net/article/51584.htm 使用模板标签可以让网站前台开发 ...
- (转)ThinkPHP自定义模板标签详解
转之--http://www.thinkphp.cn/topic/6258.html 模板标签让网站前台开发更加快速和简单,这让本该由程序猿才能完成的工作,现在只要稍懂得HTM的人也能轻易做到,这也就 ...
- ThinkPHP3.2.3 自定义标签库的使用
ThinkPHP 3.2.3 手册中标签库驱动的地址是: http://www.kancloud.cn/manual/thinkphp/1859 标签库的地址是:http://www.kancloud ...
- [JSP]自定义标签库taglib
自定义标签的步骤 自定义标签的步骤大概有三步: 1.继承javax.servlet.jsp.tagext.*下提供的几个标签类,如Tag.TagSupport.BodyTagSupport.Simpl ...
- [Java] JSP笔记 - 自定义标签
自定义标签的创建步骤: 自定义标签的四大功能: 自定义标签的类结构: 在 1.0 中呢, 可以将 <body-content> 的值设置为 JSP, 2.0中则不允许在自定义标签体中出现j ...
随机推荐
- Spring Relational Database
为了避免持久化的逻辑分散到应用的各个组件中,将数据访问功能放到一个或多个专注于此项任务的组件中,这样的组件通常称为数据访问对象(DAO)或Repository. 为了避免应用与特定的数据访问策略耦合在 ...
- easyUI datagrid值转义
数据库表里面字段的值想用另一种命名形式展示,如1是 是,2是 否 解决方法: 用到formatter ,{field:'params', title:'参数', width:100, sort ...
- 查询表Or列的注释信息
需求:开发人员需要DBA支持,查询表的注释说明,用于明确表的用途. 1.测试 session 1 创建测试表SQL> create table a_emp as select * from sc ...
- Redis同时删除多个key(linux环境下)
登录redis命令行 #del key1 key2 key3 进入redis命令安装目录 #./redis-cli KEYS "PHPREDIS_SESSION*" | awk ' ...
- Gym101986: Asia Tsukuba Regional Contest(寒假自训第12场)
A .Secret of Chocolate Poles 题意:有黑白两种木块,黑色有1,K两种长度: 白色只有1一种长度,问满足黑白黑...白黑形式,长度为L的组合种类. 思路:直接DP即可. #i ...
- #include<bits/stdc++.h>的使用
#include<bits/stdc++.h>包含了C++里面所有的库函数,因此在写任何程序的时候只需要加上#include<bits/stdc++.h>即可.
- 线程---同步(synchronized)
实现线程同步的一种方式介绍: 思路: 首先,需要被协调的类,先实现线程,并重写run方法 然后,在被协调的类中私有化控制器,控制器实例化,由构造器带入. 其次,由控制器对象具体负责调用. 举例:循环输 ...
- Go Example--for循环
package main import "fmt" func main() { i := 1 //Go循环只有for, 第一种循环方式 for i<=3 { fmt.Prin ...
- python-xlsxwriter模块绘制表格
#coding: utf-8 import xlsxwriter workbook=xlsxwriter.Workbook('chart.xlsx') worksheet=workbook.add_w ...
- linux面试题(自己添加了一些注释说明)
1.linux如何挂在windows下的共享目录 首先需要在Windows中创建一个文件夹用来共享,例如下面就是server是用来共享的,貌似在哪个位置创建都可以,我是在d盘创建的 1 mount.c ...