This article explains how to make ThinkPHP tags with examples, which has certain reference value for ThinkPHP beginners or developers.
Generally speaking, ThinkPHP’s default tag parser is in Lib/Template/TagLib/TagLibCx.class (version 2.1 is located in ThinkPHP/Lib/Think/Template/TagLib/TagLibCx.class.php), which defines commonly used tag parsers. Commonly used ThinkPHP tags such as volist php
Here we will add a
1. Tag format:
<category parentid='0' ><{$cat.catname}></category>
2. Tag function:
Loop and output the column whose parent ID is parentid
3. Operation steps:
1. Add in the private attribute of tagLibCx.class:
'category'=array('attr'=>'parentid',level=>3)
where attr: attribute of the tag level nesting level of the tag
2. Add analytical function
tag is to obtain the corresponding information by reading the xml file, and then piece it together into the required php source code, and finally output it on the page through echo.
The specific code is as follows:
public function _category($attr,$content) { //把标签的所有属性解析到$tag数组里面 $tag = $this->parseXmlAttr($attr,'category'); //得到标签里面的属性 $parentid= $tag['parentid']; //定义页面解析的变量 $result = !empty($tag['result'])?$tag['result']:'cat'; //定义数据查询的结果存放变量 $key = !empty($tag['key'])?$tag['key']:'i'; $mod = isset($tag['mod'])?$tag['mod']:'2'; //拼凑数据库查询语句 这里直接用了CategoryModel封装好的函数 $sql = "D('Category')->"; $sql .= "getCategorys(".$parentid.')'; //拼凑输出字符 $parsestr = '<?php $_result='.$sql.'; if ($_result): $'.$key.'=0;'; $parsestr .= 'foreach($_result as $key=>$'.$result.'):'; $parsestr .= '++$'.$key.';$mod = ($'.$key.' % '.$mod.' );?>'; $parsestr .= $content;//解析在category标签中的内容 $parsestr .= '<?php endforeach; endif;?>'; return $parsestr; }
getCategorys method in CategoryModel:
/* * 根据parentid得到栏目信息 * $parentid 父id * $withSelf 是否包含自己 */ public function getCategorys($parentid,$withSelf=0) { $parentid=intval($parentid); $categorys=$this->where(array('parentid'=>$parentid,'ismenu'=>1))->order('listorder ASC')->select(); //包含自己 if($withSelf) { $categorys2=$this->where(array('id'=>$parentid,'ismenu'=>1))->limit(1)->select(); $category=array_merge($categorys,$categorys2); } return $categorys; }
3. Quote on the page:
<category parentid='0'> <{$cat.catname}> </category>
Such a label is ready! ! We can get rid of the volist and dynamically output what we want on the page!
There is a complete example in the example on the official website. Please read the manual and go through the example
thinkphp is a small framework. Generally, if you know the mvc working mode, you will soon be able to handle thinkphp