zoukankan      html  css  js  c++  java
  • thinkphp5 taglib自定义标签教程

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

    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 appcommon	aglib;
    use think	emplateTagLib;
    use appcommonmodelArticle;
    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 = appcommonmodelArticle::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'     =>    'appcommon	aglibCc', 
        ],

    就是:'taglib_pre_load'     =>    'appcommon aglibCc', 这条 。


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

    {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

  • 相关阅读:
    Idea maven项目不能新建package和class的解决【转】
    Spring事务管理源码分析
    POI操作EXCEL之导出Excel(设置有效性,下拉列表引用)
    Idea之Tomcat
    idea 之git使用详细教程
    Redisson教程
    Redisson整合Spring
    IntelliJ IDEA 工具技巧
    nginx代理tomcat后,tomcat获取真实(非proxy,非别名)nginx服务端ip端口的解决方案
    Idea构建Maven项目教程
  • 原文地址:https://www.cnblogs.com/mahuateng/p/8647546.html
Copyright © 2011-2022 走看看