首頁  >  文章  >  php框架  >  解析ThinkPHP5.1自訂標籤的使用

解析ThinkPHP5.1自訂標籤的使用

藏色散人
藏色散人轉載
2021-01-18 15:04:333110瀏覽

下面由thinkphp教學專欄跟大家介紹解析ThinkPHP5.1自訂標籤的使用,希望對需要的朋友有幫助!

解析ThinkPHP5.1自訂標籤的使用

最近有項目需要用的自訂的標籤,TP使用的是5.1,各位要注意,5.1較5.0在目錄結構和程式上有較大的改動。注意自己的版本。下面進入正題。

一、建立標籤函數檔

在模型目錄下建立目錄tabLib,在目錄中建立一個Cms.php 

namespace app\cms\tagLib;
use think\Db;
use think\template\TagLib;

class Cms extends TagLib{

    protected $tags = [
        //标签定义: attr 属性列表,close 是否闭合(0或1,默认1),alias标签别名 level嵌套层次
        'lists' => ['attr' => 'num,order,sort'],
    ];

    // 当不使用content的时候,闭合标签没有效果
    // 修改过此文件后,需要改动下模板的内容,否则模板有缓存不会执行新的内容。
    public function tagLists($tag,$content){
        $cateID = $tag['cate_id']; //栏目ID
        $num    = $tag['num']; //数量
        $order  = input($tag['order']); //排序方式
        $type = $cateID;
        $name = $tag['name'];
        $tableName = 'table_name';
        $parse = &#39;<?php $map=[];&#39;;
        $parse .= &#39;$__LIST__ = Db::name(&#39;.$tableName.&#39;)->where(["cate_id"=>&#39;. $cateID .&#39;])
            ->limit(&#39;.$num.&#39;)
            ->select(); ?>&#39;;
        $parse .= &#39;{volist name="__LIST__" id="&#39;. $name .&#39;"}&#39;;
        $parse .= $content;
        $parse .= "{/volist}";
        return $parse;
    }

在開發中遇到疑慮:

1. 上面的tagLists 函數對應protected $tags中的標籤定義,大小寫要注意,否則是找不到函數的。

2. $parse 字元中全部為組裝的字串,該字串會被TP的模板標籤再解析一次,所以在裡面可以使用TP原有的標籤或原生的PHP語句。但不可以把外面的Array或物件做成參數傳入$param中,要知道他只是一個用來組裝的字串。請注意 $__LIST__這個變數的使用,要想從資料庫讀取數據,必須寫完整的PHP程式碼,不可以在外面執行完查詢,然後把查詢後的list做成變數傳入。

 二、在範本設定資訊中載入此標籤函數

在模組cms/config/template.php 中加入一句: 'taglib_pre_load' => 'app\cms\ tagLib\Cms',

如果你沒有此文件,可以在根目錄裡的config目錄下,複製一份template放到cms/config目錄下。

三、在模板中使用標籤。

  {cms:lists name="row" num="10" cate_id="5" order="1"}
        <li>{$row.title}</li>
    {/cms:lists}

name, num ,cate_id 等屬性會作為tagLists的第一個參數 $tags傳入。而{cms:lists} 和 {$/cms:lists}之間的內容,會作為一個完整的字串$content 傳入 tagLists 的第二個參數。

注意:這裡分閉合標籤和非閉合標籤,如果是閉合標籤,則必須在(一)中使用content,如果是非閉合標籤則可以不用。如果你不使用content變量,則閉合的標籤 {/cms:lists}會被原樣輸出,不會進行解析。

暫時有這麼多的困惑,關於分頁列表的問題還在研究,研究完了再補充上來。

補充:在tagList中不要對$tag[]陣列中取得到的資料進行資料型別轉換,因為當傳過來的是變數時,這個變數不會生效! !所以在這裡使用intval($tag[num])是不對的。

以上是解析ThinkPHP5.1自訂標籤的使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除