Home > PHP Framework > ThinkPHP > Teach you how to use TP5 taglib to customize tags

Teach you how to use TP5 taglib to customize tags

藏色散人
Release: 2021-09-10 16:08:22
forward
2702 people have browsed it

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

taglib是tp框架自定义标签功能,如果你用过cms,肯定见过类似:

{dede:arclist typeid='' row='' col='' titlelen='' infolen=''  orderby='' keyword=''}
ssss...
{/dede:arclist}
Copy after login

或者:

{pc:content action="lists" cache="3600" num="20" page="$page"}
{/pc}
Copy after login

这样的操作,这对于开发工作是挺方便的,所以觉得有必要看下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 = [
        &#39;articles&#39; => [&#39;attr&#39;=> &#39;field,id,limit,cid,order,returnname&#39;, &#39;close&#39;=>1]
    ];
    /**
     * 文章标签
     */
    public function tagArticles($tag, $content)
    {
        $id = $tag[&#39;id&#39;]?$tag[&#39;id&#39;]:&#39;vo&#39;;
        $order         = empty($tag[&#39;order&#39;]) ? "&#39;id DESC&#39;" : &#39;"&#39;.$tag[&#39;order&#39;].&#39;"&#39;;
        $returnname = &#39;article_data&#39;;
        $field = "&#39;&#39;";
        if (!empty($tag[&#39;field&#39;])) {
            if (strpos($tag[&#39;field&#39;], &#39;$&#39;) === 0) {
                $field = $tag[&#39;field&#39;];
                $this->autoBuildVar($field);
            } else {
                $field = "&#39;{$tag[&#39;field&#39;]}&#39;";
            }
        }
        $cid = "&#39;&#39;";
        if (!empty($tag[&#39;cid&#39;])) {
            if (strpos($tag[&#39;cid&#39;], &#39;$&#39;) === 0) {
                $cid = $tag[&#39;cid&#39;];
                $this->autoBuildVar($cid);
            } else {
                $cid = "&#39;{$tag[&#39;cid&#39;]}&#39;";
            }
        }
        $limit = "&#39;&#39;";
        if (!empty($tag[&#39;limit&#39;])) {
            if (strpos($tag[&#39;limit&#39;], &#39;$&#39;) === 0) {
                $limit = $tag[&#39;limit&#39;];
                $this->autoBuildVar($limit);
            } else {
                $limit = "&#39;{$tag[&#39;limit&#39;]}&#39;";
            }
        }else{
            $limit = &#39;0,5&#39;;
        }
        $parse = <<<parse
<?php
    \$$returnname = \app\common\model\Article::taglib_articles([
    &#39;field&#39;   => {$field},
    &#39;cid&#39;=>{$cid},
    &#39;limit&#39;=>{$limit},
    &#39;order&#39;=>{$order}
]);
?>
{volist name="{$returnname}" id="{$id}"}
{$content}
{/volist}
parse;
        return $parse;
    }
}
Copy after login

这里演示的是一个文章标签 articles里面调用了Article模型的静态方法taglib_articles , 顺便也贴下代码吧,就是根据条件查询的

public static function taglib_articles($param)
    {
        $field = $param[&#39;field&#39;];
        $cid = $param[&#39;cid&#39;];
        $limit = $param[&#39;limit&#39;];
        $order = $param[&#39;order&#39;];
        $result = Article::where(&#39;cid&#39;, &#39;in&#39;,$cid)->field($field)->limit($limit)->order($order)->select();
        return $result;
    }
Copy after login

之后,在tp的配置文件里,加一条配置载入自定义标签文件的

// +----------------------------------------------------------------------
    // | 模板设置
    // +----------------------------------------------------------------------
    &#39;template&#39;               => [
        // 模板引擎类型 支持 php think 支持扩展
        &#39;type&#39;         => &#39;Think&#39;,
        // 模板路径
        &#39;view_path&#39;    => &#39;&#39;,
        // 模板后缀
        &#39;view_suffix&#39;  => &#39;html&#39;,
        // 模板文件名分隔符
        &#39;view_depr&#39;    => DS,
        // 模板引擎普通标签开始标记
        &#39;tpl_begin&#39;    => &#39;{&#39;,
        // 模板引擎普通标签结束标记
        &#39;tpl_end&#39;      => &#39;}&#39;,
        // 标签库标签开始标记
        &#39;taglib_begin&#39; => &#39;{&#39;,
        // 标签库标签结束标记
        &#39;taglib_end&#39;   => &#39;}&#39;,
        &#39;taglib_pre_load&#39;     =>    &#39;app\common\taglib\Cc&#39;, 
    ],
Copy after login

就是:'taglib_pre_load' => 'app\common\taglib\Cc', 这条 。

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

{cc:articles cid="1" field=&#39;id,title&#39; limit="2" order="id asc" id="vo"}<li><a href="#">{$vo.title}</a></li>{/cc:articles}
Copy after login

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

推荐学习:《thinkphp教程

The above is the detailed content of Teach you how to use TP5 taglib to customize tags. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:cnblogs.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template