学着写了一下,终于搞定了,顺便分享一下!
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自定义标签教程
原文地址:https://www.cnblogs.com/mahuateng/p/8647546.html