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

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

最近在看flutter,搞了一个flutter中文社区,欢迎您来看看http://www.fluttercn.com

原文地址:https://www.cnblogs.com/mahuateng/p/8647546.html

时间: 2024-10-01 20:04:42

thinkphp5 taglib自定义标签教程的相关文章

taglib 自定义标签

自定义<%@ taglib prefix="cf" uri="http://training.bmcc.com.cn/tld/functions"%> 就可以根据${cf:proxyConfig('elearning_play')} 实现自定义标签 读取  proxyConfig中的内容, 如果我们使用jsp2,则web.xml使用的是servlet2.4以上的版本.那我们看一下web.xml对应的头文件: 新增的特性是: <web-app ver

自定义标签的写法

例如我们在一个html文档中写一个自定义的标签 <%@taglib uri="" prefix="c1"%>    //uri是一个命名空间,perfix是一个前缀 在html的正文中我们写上 <c1: msg="" qty="">     //c1就是这个标签的标签名,msg和qty是属性 我们要定义这个标签就要先些上这个标签的类,这个类要继承SimpleTagSupport public class

Servlet和JSP之自定义标签学习

  此文章会讲述简单标签处理器,因为经典自定义标签处理器没有简单标签处理器方便使用,故在此不进行描述. 参考:慕课网的<JSP自定义标签>视频; <Servlet.JSP和Spring MVC初学指南>的第六章; IBM的<利用 JSP 2 提供的 SimpleTagSupport 开发自定义标签>; 菜鸟教程的JSP自定义标签文章. 自定义标签   自定义标签 自定义标签就是将方法封装到自定义标签处理类中,然后使用方法与JSTL标签来达到,解决JSP中JavaBean

JSP自定义标签

假设 向浏览器输出当前客户的IP地址 ,我们现在可以这样写 <% //获取当前用户的IP地址 String ip=request.getRemoteHost(); out.print("当前用户的IP地址是:"+ip); %> 但我们现在为了要在jsp页面尽量减少java代码,这个时候我们可以向前面学标签一样,自己来定义一个标签,通过调用标签来达到实现显示客户端的ip地址. 首先第一步我们要创建一个普通的java类,继承SimpleTagSupport类,叫标签处理器类(用

Javaweb学习笔记6—EL表达式与JSTL及自定义标签

 前几天博客被黑了,导致博客登陆不上,把前几天应该发的东西的东西重新发一遍 今天来讲javaweb的第六阶段学习. EL表达式与JSTL及自定义标签是对上篇文章介绍的JSP的扩展,不能说是很重要的东西,但是也要了解. 老规矩,首先先用一张思维导图来展现今天的博客内容. ps:我的思维是用的xMind画的,如果你对我的思维导图感兴趣并且想看到你们跟详细的备注信息,请点击下载 另外:如果图看不清的话请右击---在新窗口中打开会清楚很多. 一.EL表达式 1,EL简介 Expression Lan

java jsp自定义标签

自定义标签开发步骤 1)编写一个普通的java类,继承SimpleTagSupport类,叫标签处理器类 package gz.itcast; import java.io.IOException; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.SimpleTagSupport; public class iftag extends SimpleTagSupport { private boolean

自定义标签

1 如果在jsp页面中写java代码 是很不合适的 而且坏处很多像这样: <%@page import="java.util.ArrayList"%><%@page import="java.util.List"%><%@page import="com.atguigu.javaweb.Customer"%><%@ page language="java" contentType=&q

自定义标签-自定义注解

首先是4个自定义注解类StaticResourceType.java public enum StaticResourceType { LESS,CSS,JS} StaticResource.java @Target({ElementType.FIELD})@Retention(RetentionPolicy.RUNTIME)public @interface StaticResource { StaticResourceType type(); String path(); Dependenc

讲解JSP自定义标签

一.基本概念 1.标签(Tag) 标签是一种XML元素,通过标签可以使JSP网页变得简洁并且易于维护,还可以方便地实现同一个JSP文件支持多种语言版本.由于标签是XML元素,所以它的名称和属性都是大小写敏感的. 2.标签库(Tag library) 由一系列功能相似.逻辑上互相联系的标签构成的集合称为标签库. 3.标签库描述文件(Tag Library Descriptor) 标签库描述文件是一个XML文件,这个文件提供了标签库中类和JSP中对标签引用的映射关系.它是一个配置文件,和web.xm