• 技术文章 >php框架 >ThinkPHP

    教你如何使用TP5 taglib自定义标签

    藏色散人藏色散人2021-09-10 16:08:22转载137
    学着写了一下,终于搞定了,顺便分享一下!

    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}

    很方便吧,整了两个小时,才写好,特此记录一下,希望也能帮助到需要的朋友们!

    推荐学习:《thinkphp教程

    以上就是教你如何使用TP5 taglib自定义标签的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:cnblogs,如有侵犯,请联系admin@php.cn删除
    专题推荐:thinkphp5 taglib
    上一篇:ThinkPHP怎么配置路由,让后台隐藏起来! 下一篇:解决TP5取不到Model的自定义字段问题
    线上培训班

    相关文章推荐

    • 解析ThinkPHP5如何引入Go AOP和PHP AOP编程• 简析thinkphp5.0域名如何绑定不同模块• thinkphp5整合phpsocketio过程亲自踩的坑!• thinkphp5与laravel的区别是什么

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网