自定義標籤錯誤的調試方法: 到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'">