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'">

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章