thinkphp自定义标签与view直接标签实例教程

发布时间:2020-11-10编辑:脚本学堂
本文介绍了thinkphp自定义标签与view直接标签操作数据的方法,thinkphp自定义标签实例教程,需要的朋友参考下。

thinkphp自定义标签与view直接标签实例教程

首先,需要在ThinkPHPLibThinkTemplateTagLib目录下增加一个文件名叫:TagLibZpass.class.php
TagLibZpass.class.php:
 

复制代码 代码示例:

<?php
/*   Zpass自定义标签  */
class TagLibZpass extends TagLib{
    // 标签定义
    protected $tags   =  array(
 // 标签定义:attr 属性列表close 是否闭合(0 或者1 默认1)alias 标签别名level 嵌套层次
 'select'=>array('attr'=>'table,limit,order,where,field','level'=>3),
 );

public function _select($attr,$content)
{
 static $_iterateParseCache = array();
 //如果已解析过,则直接返回变量值
 $cacheIterateId = md5($attr.$content);
 if(isset($_iterateParseCache[$cacheIterateId]))
    return $_iterateParseCache[$cacheIterateId];
 $tag      = $this->parseXmlAttr($attr,'table');
 $db=M($tag['table']);
 $list=$db->where($tag['where'])->order($tag['order'])->limit($tag['limit'])->field($tag['field'])->select();
 preg_match_all("/[field:w*]/",$content,$match);
 $match=$match[0];
 $match=array_unique($match);//去掉数组重复项
 foreach($match as $i=>$vo){
     $field[$i]=substr($vo,7,count($vo)-2);  
 }
 foreach($list as $i=>$value){
     if($i==0){
  $parseStr=$content;
     }else{
  $parseStr=$parseStr.$content;
     }
     foreach($match as $j=>$vo){
        $parseStr=str_replace($vo,$value[$field[$j]],$parseStr);
     }
 }
 $_iterateParseCache[$cacheIterateId] = $parseStr;
 if(!emptyempty($parseStr)) {
     return $this->tpl->parse($parseStr);
 }
 return ;
}
}
?>

然后,视图中添加:
 

复制代码 代码示例:
<taglib name='zpass' />

调用方法:
 

复制代码 代码示例:
<zpass:select table="classes" order="sort desc" field="id,title" limit="3" >
<span class="marginleft_1"><a href='{:U("News/index?id=[field:id]")}'>[field:title]</a></span>
</zpass:select>

这个只是例子,代表可以自由扩展THINKPHP标签...做自己的特色标签。
以上标签例子实际是查询classes表里的内容。