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

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}

 

版权声明:若无特殊注明,本文皆为( yueshuo )原创,转载请保留文章出处。