ThinkPHP自定義標籤

餘二五發表於2017-11-24

   研究ThinkPHP自定義標籤的時候,發現網上很多教程都很亂,官網又沒有給出比較詳細的方法,所以就自己研究了一下,現在將ThinkPHP的方法詳細的記錄下來。

   1.建立TP的專案,略過

   2.在config.php中加入`APP_AUTOLOAD_PATH`=>`@.TagLib`,自動載入TagLib裡面的檔案

   3.在專案名稱/Lib中建立TagLib資料夾

   4.在TagLib資料夾中新建一個TagLibXl.class.php檔案(格式:TagLib自定義的名稱,首字母大寫)

   5.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?php
import(`TagLib`);
class TagLibXl extends TagLib{
    protected $tags=array(
        `list`=>array(
            `attr`=>`table,limit`,   //設定標籤屬性
            `level`=>`3`,            //迴圈次數
            `close`=>`1`,            //是否閉合
                                                       
        ),
    );
                                               
    function _list($attr,$content){
        $tag=$this->parseXmlAttr($attr`list`);         //解析操作,TP的自定義標籤是基於xml的
        $db=M($tag[`table`]);               //根據返回的table值例項化
        $list=$db->limit($tag[`limit`])->select();            //查詢返回資料
        preg_match_all("/[field:w*]/",$content,$match);     //獲取返回值裡[field:xxx]這種格式
        $match=$match[0];    
        $match=array_unique($match);//去掉陣列重複項
        foreach($match as $i=>$vo){
            $field[$i]=substr($vo,7,count($vo)-2);
        }
        //以下迴圈為遍歷將[field:xxx]格式替換為實際內容
        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);
            }
        }
        //解析內容模板,並返回字串
        if(!empty($parseStr)) {
            return $this->tpl->parse($parseStr);
        }
        return ;
    }
}



在模板中使用方法:

1
2
3
4
5
6
<taglib name="xl" />
<ul>
<xl:list table="Article" limit="0,3">
    <li><span>[field:id]</span><a href="">[field:title]</a></li>
</xl:list>
</ul>
本文轉自 3147972 51CTO部落格,原文連結:http://blog.51cto.com/a3147972/1333525,如需轉載請自行聯絡原作者


相關文章