Thinkphp 中的自定义标签的使用

自定义标签错误的调试方法: 到Public\Runtime\项目名\cache 下去找 编译好的文件
常见的错误类型:在模板中制定标签 的查询条件时候 如:
<blog:article name=”CategoryJobs” limit=”10″ where=”parentid=’0′”>
<blog:article name=”CategoryJobs” limit=”10,6″ where=”parentid=’0′”> //像上述的写法(limit)就是错误的写法,和没有limit的用法是一样的,怎么查看错误,去看编译文件,要这样:limit=”‘10,6′”

还有where条件经常写错where条件的常见格式就是where(“字段=’value'”)

————————————————————————————————-

以blog标签为例

1.首先要注意Thinkphp中的TagLib.class.php 的目录位置 ThinkPHP\Lib\Think\Template\TagLib.class

ThinkPHP 是自带的核心包

2.在某个项目的Lib文件夹下建立一个TagLib文件夹,然后再建立一个TagLibBlog.class.php 的php文件这样就建立一个blog标签

TagLibBlog.class.php 的内容:

<?php
import(“TagLib”);  //引入TagLib 类

class TagLibBlog extends TagLib{   //定义blog标签
 protected $tags=array(
  ‘test’=>array(“attr”=>”attr1,attr2”,level=>3),
  ‘article’=>array(‘attr’=>’name,field,limit,order,where,sql,key,mod’,’level’=>3),
 );
 
 public function _test($attr,$content){
  $tag=$this->parseXmlAttr($attr,’test’);
  return $tag[“attr1″].”,”.$tag[“attr2”];
 }
 
 public function _article($attr,$content){
  
  $tag = $this->parseXmlAttr($attr,’article’);
  $result = !empty($tag[‘result’])?$tag[‘result’]:’article’; //定义数据查询的结果存放变量
  $key = !empty($tag[‘key’])?$tag[‘key’]:’i’;
  $mod = isset($tag[‘mod’])?$tag[‘mod’]:’2′;
  if ($tag[‘name’]){
   $sql = “M(‘{$tag[‘name’]}’)->”;
   $sql .= ($tag[‘field’])?”field({$tag[‘field’]})->”:”;
   $sql .= ($tag[‘order’])?”order({$tag[‘order’]})->”:”;
   $sql .= ($tag[‘where’])?”where(\”{$tag[‘where’]}\”)->”:”;   //被重新处理过了
   $sql .= “select()”;
  }
  //下面拼接输出语句
  $parsestr = ‘<?php $_result=’.$sql.’; if ($_result): $’.$key.’=0;’;
  $parsestr .= ‘foreach($_result as $key=>$’.$result.’):’;
  $parsestr .= ‘++$’.$key.’;$mod = ($’.$key.’ % ‘.$mod.’ );?>’;
  $parsestr .= $content;//解析在article标签中的内容
  $parsestr .= ‘<?php endforeach; endif;?>’;
  return $parsestr;
  
 }
}

?>

———————————

然后在某个项目的Common的文件夹下建立一个taglibs.php 文件

内容如下:

<?php
return array(
 ‘blog’=>’@.TagLib.TagLibBlog’,  //@.TagLib.TagLibBlog  表示的TagLibBlog的标签位置 “@”表示在当前的项目下  ;整个的意思是:在当前项目下的TagLib文件夹下的TagLibBlog的文件夹

———————————————————–

3.在模板中使用(HTML文件中)  定义的标签
<body>
<taglib name=”blog”/>   //测试
<blog:test attr1=”yangfei” attr2=”jack”>  //blog就是自定义标签的名称 test是处理函数
</blog:test>
———————————-

 “name”是表名  “limit”是限制的记录条数  where是查询条件
<blog:article name=”Modules” limit=”10″ where=”title=’主菜单'”> //这里是和数据库打交道的标签
<br/>
{$article.position}

<br/>
</blog:article>
</body>

————————————————–

附:但查询条件有多个时,

<blog:article name=”Modules” limit=”10″ where=”title=’主菜单’ and position=’right'”>

本文固定链接: http://www.ccsbbs.com.cn/archives/5735.html | 极限手指

该日志由 极限手指 于2013年02月27日发表在 ThinkPHP 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: Thinkphp 中的自定义标签的使用 | 极限手指

Thinkphp 中的自定义标签的使用:等您坐沙发呢!

发表评论

您必须 [ 登录 ] 才能发表留言!