thinkphp5或者fastadmin自定义标签,实现副栏目的调用
学着写了一下,终于搞定了,顺便分享一下!
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}
很方便吧,整了两个小时,才写好,特此记录一下,希望也能帮助到需要的朋友们!