ThinkPHP5 自定义模版标签tablib

ThinkPHP5 自定义模版标签tablib

新建文件application/common/taglib/Diy.php
Diy.php

<?php
// +----------------------------------------------------------------------
// | 自定义模版标签
// +----------------------------------------------------------------------
// | Author: SenSen <1050575278> 2018-12
// +----------------------------------------------------------------------
namespace app\common\taglib;

use think\Db;
use think\template\TagLib;

class Sen extends TagLib
{
    protected $tags = [
        'arclist' => ['attr'=> 'field,id,limit,cid,order,name,flag,type', 'close'=>1],
        'show' => ['attr'=> 'title,field', 'close'=>0],
    ];

    /**
     * 文章标签
     * @param $tag
     * @param $content
     * @return string
     */
    public function tagArclist($tag, $content)
    {
        $id = isset($tag['id']) ? $tag['id'] : 'vo';
        $order = empty($tag['order']) ? "'id DESC'" : '"'.$tag['order'].'"';
        $name = 'article';
        $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']}'";
            }
        }
        $flag = "''";
        if (!empty($tag['flag'])) {
            if (strpos($tag['flag'], '$') === 0) {
                $flag = $tag['flag'];
                $this->autoBuildVar($flag);
            } else {
                $flag = "'{$tag['flag']}'";
            }
        }
        $type = "''";
        if (!empty($tag['type'])) {
            if (strpos($tag['type'], '$') === 0) {
                $type = $tag['type'];
                $this->autoBuildVar($type);
            } else {
                $type = "'{$tag['type']}'";
            }
        }
        $limit = "''";
        if (!empty($tag['limit'])) {
            if (strpos($tag['limit'], '$') === 0) {
                $limit = $tag['limit'];
                $this->autoBuildVar($limit);
            } else {
                $limit = "'{$tag['limit']}'";
            }
        }else{
            $limit = '0,6';
        }
        $parse = <<<parse
<?php
    \$$name = \app\common\model\Article::tagArticle([
    'field'   => {$field},
    'cid'=>{$cid},
    'limit'=>{$limit},
    'flag'=>{$flag},
    'type'=>{$type},
    'order'=>{$order}
]);
?>
{volist name="{$name}" id="{$id}"}
{$content}
{/volist}
parse;
        return $parse;
    }

    /**
     * 广告标签
     * @param $tag
     * @return mixed
     */
    public function tagShow($tag)
    {
        $title = $tag['title'] ? $tag['title'] : '';
        $result = Db::name('ad')->where(['tag'=>$title, 'status'=>1])->find();
        return $result['content'];
    }

}

model/Article.php

<?php

namespace app\common\model;

use think\Db;
use think\db\Where;

class Article extends Base
{
    /**
     * 关联用户
     */
    public function user()
    {
        return $this->belongsTo('User', 'add_uid');
    }

    /**
     * 自定义标签处理
     * @param $param
     */
    public static function tagArticle($param)
    {
        $field = isset($param['field']) ? $param['field'] : '';
        $cid = isset($param['cid']) ? $param['cid'] : '';
        $limit = isset($param['limit']) ? $param['limit'] : 6;
        $order = isset($param['order']) ? $param['order'] : 'id desc';
        $flag = isset($param['flag']) ? $param['flag'] : '';
        $type = isset($param['type']) ? $param['type'] : 1;

        $where = new Where;
        if($cid){
            $where['cate_id'] = ['in', $cid];
        }
        if($type){
            $where['type'] = $type;
        }
        if($flag){
            $where[] = ['exp', Db::raw("find_in_set('".$flag."', `flag`)")];
        }

        $result = self::where($where)->limit($limit)->order($order)->select();

        return $result;
    }

}

配置文件template.php

'taglib_pre_load' => 'app\common\taglib\Sen',

前台模版:

{sen:arclist flag='c' limit="7" type='1' id="vo"}
<div class="item">
    <div class="thumb pull-left">
        <a href="/article/{$vo['id']}"><img class="hover" src="{$vo.thumb|get_arc_thumb}" alt="{$vo.title}"></a>
    </div>
    <div class="info pull-right">
        <h6><a href="/article/{$vo['id']}">{$vo.title}</a></h6>
        <div class="tag">
            <img src="{:get_size_thumb($vo.avatar, '50x50')}" alt="{$vo.title}">
            <span class="name">{if condition="$vo.author"}{$vo.author}{else/}{$vo.add_uname}{/if}</span>
            <span class="time">{$vo.create_time|get_human_date}</span>
            <span><i class="fa fa-comments-o"></i>{$vo.comment}</span>
            <span><i class="fa fa-eye"></i>{$vo.click}</span>
        </div>
        <div class="desc">
            <p>{$vo.description}</p>
        </div>
    </div>
</div>
{/sen:arclist}

Tags: none

添加新评论