教你如何使用TP5 taglib自定義標簽

學著寫了一下,終于搞定了,順便分享一下!

taglib是tp框架自定義標簽功能,如果你用過cms,肯定見過類似:

{dede:arclist typeid='' row='' col='' titlelen='' infolen=''  orderby='' keyword=''} ssss... {/dede:arclist}

或者:

{pc:content action="lists" cache="3600" num="20" page="$page"} {/pc}

這樣的操作,這對于開發工作是挺方便的,所以覺得有必要看下tp的taglib,教程如下:

1 、在common(我是在common,你自己看,反正是用命名空間載入)里新建目錄taglib
2、在taglib里新建Cc.php 繼承think的Tglib,代碼如下:

<?php /**  * Created by PhpStorm.  * User: lichenchen  * Date: 2018/3/25  * Time: 下午8:34  */ namespace appcommontaglib; use thinktemplateTagLib; use appcommonmodelArticle; class Cc extends TagLib {       protected $tags = [         &#39;articles&#39; =>?['attr'=&gt;?'field,id,limit,cid,order,returnname',?'close'=&gt;1] ????]; ????/** ?????*?文章標簽 ?????*/ ????public?function?tagArticles($tag,?$content) ????{ ????????$id?=?$tag['id']?$tag['id']:'vo'; ????????$order?????????=?empty($tag['order'])???"'id?DESC'"?:?'"'.$tag['order'].'"'; ????????$returnname?=?'article_data'; ????????$field?=?"''"; ????????if?(!empty($tag['field']))?{ ????????????if?(strpos($tag['field'],?'$')?===?0)?{ ????????????????$field?=?$tag['field']; ????????????????$this-&gt;autoBuildVar($field); ????????????}?else?{ ????????????????$field?=?"'{$tag['field']}'"; ????????????} ????????} ????????$cid?=?"''"; ????????if?(!empty($tag['cid']))?{ ????????????if?(strpos($tag['cid'],?'$')?===?0)?{ ????????????????$cid?=?$tag['cid']; ????????????????$this-&gt;autoBuildVar($cid); ????????????}?else?{ ????????????????$cid?=?"'{$tag['cid']}'"; ????????????} ????????} ????????$limit?=?"''"; ????????if?(!empty($tag['limit']))?{ ????????????if?(strpos($tag['limit'],?'$')?===?0)?{ ????????????????$limit?=?$tag['limit']; ????????????????$this-&gt;autoBuildVar($limit); ????????????}?else?{ ????????????????$limit?=?"'{$tag['limit']}'"; ????????????} ????????}else{ ????????????$limit?=?'0,5'; ????????} ????????$parse?=??{$field}, ????'cid'=&gt;{$cid}, ????'limit'=&gt;{$limit}, ????'order'=&gt;{$order} ]); ?&gt; {volist?name="{$returnname}"?id="{$id}"} {$content} {/volist} parse; ????????return?$parse; ????} }

這里演示的是一個文章標簽 articles里面調用了Article模型的靜態方法taglib_articles , 順便也貼下代碼吧,就是根據條件查詢的

public?static?function?taglib_articles($param) ????{ ????????$field?=?$param['field']; ????????$cid?=?$param['cid']; ????????$limit?=?$param['limit']; ????????$order?=?$param['order']; ????????$result?=?Article::where('cid',?'in',$cid)-&gt;field($field)-&gt;limit($limit)-&gt;order($order)-&gt;select(); ????????return?$result; ????}

之后,在tp的配置文件里,加一條配置載入自定義標簽文件的?

//?+---------------------------------------------------------------------- ????//?|?模板設置 ????//?+---------------------------------------------------------------------- ????'template'???????????????=&gt;?[ ????????//?模板引擎類型?支持?php?think?支持擴展 ????????'type'?????????=&gt;?'Think', ????????//?模板路徑 ????????'view_path'????=&gt;?'', ????????//?模板后綴 ????????'view_suffix'??=&gt;?'html', ????????//?模板文件名分隔符 ????????'view_depr'????=&gt;?DS, ????????//?模板引擎普通標簽開始標記 ????????'tpl_begin'????=&gt;?'{', ????????//?模板引擎普通標簽結束標記 ????????'tpl_end'??????=&gt;?'}', ????????//?標簽庫標簽開始標記 ????????'taglib_begin'?=&gt;?'{', ????????//?標簽庫標簽結束標記 ????????'taglib_end'???=&gt;?'}', ????????'taglib_pre_load'?????=&gt;????'appcommontaglibCc',? ????],

就是:’taglib_pre_load’?????=>????‘appcommontaglibCc’, 這條 。

之后就可以在模版里使用了

{cc:articles cid="1" field='id,title' limit="2" order="id asc" id="vo"}<li><a href="#">{$vo.title}</a></li>{/cc:articles}

很方便吧,整了兩個小時,才寫好,特此記錄一下,希望也能幫助到需要的朋友們!

推薦學習:《thinkphp教程

? 版權聲明
THE END
喜歡就支持一下吧
點贊15 分享