1. 程式人生 > >thinkphp5 taglib自定義標簽教程

thinkphp5 taglib自定義標簽教程

.com date 記錄 page 標記 tag dep protect var

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

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 app\common\taglib;
use think\template\TagLib;
use app\common\model\Article;
class Cc extends TagLib
{


    protected $tags = [
        ‘articles‘ => [‘attr‘=> ‘field,id,limit,cid,order,returnname‘, ‘close‘=>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->autoBuildVar($field); } else { $field = "‘{$tag[‘field‘]}‘"; } } $cid = "‘‘"; if (!empty($tag[‘cid‘])) { if (strpos($tag[‘cid‘], ‘$‘) === 0) { $cid = $tag[‘cid‘]; $this->autoBuildVar($cid); } else { $cid = "‘{$tag[‘cid‘]}‘"; } } $limit = "‘‘"; if (!empty($tag[‘limit‘])) { if (strpos($tag[‘limit‘], ‘$‘) === 0) { $limit = $tag[‘limit‘]; $this->autoBuildVar($limit); } else { $limit = "‘{$tag[‘limit‘]}‘"; } }else{ $limit = ‘0,5‘; } $parse = <<<parse <?php \$$returnname = \app\common\model\Article::taglib_articles([ ‘field‘ => {$field}, ‘cid‘=>{$cid}, ‘limit‘=>{$limit}, ‘order‘=>{$order} ]); ?> {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)->field($field)->limit($limit)->order($order)->select();
        return $result;
    }

之後,在tp的配置文件裏,加一條配置載入自定義標簽文件的

// +----------------------------------------------------------------------
    // | 模板設置
    // +----------------------------------------------------------------------
    ‘template‘               => [
        // 模板引擎類型 支持 php think 支持擴展
        ‘type‘         => ‘Think‘,
        // 模板路徑
        ‘view_path‘    => ‘‘,
        // 模板後綴
        ‘view_suffix‘  => ‘html‘,
        // 模板文件名分隔符
        ‘view_depr‘    => DS,
        // 模板引擎普通標簽開始標記
        ‘tpl_begin‘    => ‘{‘,
        // 模板引擎普通標簽結束標記
        ‘tpl_end‘      => ‘}‘,
        // 標簽庫標簽開始標記
        ‘taglib_begin‘ => ‘{‘,
        // 標簽庫標簽結束標記
        ‘taglib_end‘   => ‘}‘,
        ‘taglib_pre_load‘     =>    ‘app\common\taglib\Cc‘, 
    ],

就是:‘taglib_pre_load‘ => ‘app\common\taglib\Cc‘, 這條 。


之後就可以在模版裏使用了

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

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

最近在看flutter,搞了一個flutter中文社區,歡迎您來看看http://www.fluttercn.com

thinkphp5 taglib自定義標簽教程