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}