thinkphp5 taglib自定义标签教程

匿名 (未验证) 提交于 2019-12-02 22:11:45

学着写了一下,终于搞定了,顺便分享一下!

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;     }

// +----------------------------------------------------------------------     // | 模板设置     // +----------------------------------------------------------------------     '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',      ],




之后就可以在模版里使用了

{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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!