'taglib_build_in'    => 'cx,tags', // 内置标签库名称(标签使用不必指定标签库名称),以逗号分隔 注意解析顺序

<?php

namespace think\template\taglib;

use think\template\TagLib;

class Tags extends TagLib{

/**

* 定义标签列表

*/

protected $tags = [

'sel' => ['attr' => 'table,id,where,order,limit,field,page'],

'find' => ['attr' => 'table,id,where,field'],

'val' => ['attr' => 'table,where,value,getdata','close' => 0],
];
/**

* volist标签解析 循环输出数据集

* 格式:

* {volist name="userList" id="user" empty=""}

* {user.username}

* {user.email}

* {/volist}

* @access public

* @param array $tag 标签属性

* @param string $content 标签内容

* @return string|void

*/

public function tagsel($tag, $content)

{
$table = $tag['table'];

$id = isset($tag['id'])?$tag['id']:'vo';

$where = isset($tag['where'])?$tag['where']:'[]';

$order = isset($tag['order'])?$tag['order']:'id desc';

$limit = !empty($tag['limit']) ? $tag['limit'] : '0';

$field = isset($tag['field'])?$tag['field']:'*';

$page = isset($tag['page'])?$tag['page']:false;
if($page){
$pa=input('');
if($pa){
foreach($pa as $key => $val){
$string[$key] = stripslashes($val);
}
$pa = $string;
}else{
$pa=[];
}
$querys= var_export(['query'=>$pa,'var_page'=>$page],TRUE);
}else{
$querys='[]';
}
$parseStr = '<?php ';
//查看是否存在model类

$file=[APP_PATH.'common/model/'.ucfirst($table).'.php',APP_PATH.request()->module().'model/'.ucfirst($table).'.php'];

if(file_exists($file[0])) $parseStr .= '$db=model("app\common\model\\'.ucfirst($table).'");';

if(file_exists($file[1])) $parseStr .= '$db=model(app\\'.request()->module().'\model\\'.ucfirst($table).');';

if(!file_exists($file[0]) && !file_exists($file[1])){

$parseStr .= '$db=db("'.$table.'");';

}
$parseStr .= $page?"\$seldata=\$db->where($where)->field('$field')->order('$order')->paginate('$limit',false,$querys);":"\$seldata=\$db->where($where)->field('$field')->order('$order')->limit('$limit')->select();";

// 设置了输出数组长度

$parseStr .= 'foreach($seldata as $key=>$' . $id . '): ?>';

$parseStr .= $content;

$parseStr .= '<?php endforeach; ?> ';

if ($page) {

$parseStr .= '<?php $' . $page . ' = $seldata->render(); ?>';

}

if (!empty($parseStr)) {
return $parseStr;

}

return;

}

public function tagfind($tag, $content){

$table = $tag['table'];

$id = isset($tag['id'])?$tag['id']:'vo';

$where = isset($tag['where'])?$tag['where']:'[]';

$field = isset($tag['field'])?$tag['field']:'*';

$parseStr = '<?php ';

//查看是否存在model类

$file=[APP_PATH.'common/model/'.ucfirst($table).'.php',APP_PATH.request()->module().'model/'.ucfirst($table).'.php'];

if(file_exists($file[0])) $parseStr .= '$db=model("app\common\model\\'.ucfirst($table).'");';

if(file_exists($file[1])) $parseStr .= '$db=model(app\\'.request()->module().'\model\\'.ucfirst($table).');';

if(!file_exists($file[0]) && !file_exists($file[1])){

$parseStr .= '$db=db("'.$table.'");';

}

$parseStr .= '$'.$id."=\$db->where($where)->field('$field')->find(); ?>";

$parseStr .= $content;

if (!empty($parseStr)) {

return $parseStr;

}

return;

}

public function tagval($tag){

$table = $tag['table'];

$where = isset($tag['where'])?$tag['where']:'[]';

$value = isset($tag['value'])?$tag['value']:'id';

$getdata = isset($tag['getdata'])?$tag['getdata']:false;

$parseStr = '<?php ';

//查看是否存在model类

$file=[APP_PATH.'common/model/'.ucfirst($table).'.php',APP_PATH.request()->module().'model/'.ucfirst($table).'.php'];

if(file_exists($file[0])) $parseStr .= '$db=model("app\common\model\\'.ucfirst($table).'");';

if(file_exists($file[1])) $parseStr .= '$db=model(app\\'.request()->module().'\model\\'.ucfirst($table).');';

if(file_exists($file[1])) $parseStr .= 'use app\\'.request()->module().'\model\\'.ucfirst($table).'; $db=model("'.ucfirst($table).'");';

if(!file_exists($file[0]) && !file_exists($file[1])){

$parseStr .= '$db=db("'.$table.'");';

}

$parseStr .= "\$arr=\$db->where($where)->field('$value')->find(); ";

$parseStr .= $getdata ?'echo $arr->getdata("'.$value.'");?>' :'echo $arr["'.$value.'"];?>';

if (!empty($parseStr)) {

return $parseStr;

}

return;

}

}

Tp5自定义标签的更多相关文章

  1. [JSP]自定义标签库taglib

    自定义标签的步骤 自定义标签的步骤大概有三步: 1.继承javax.servlet.jsp.tagext.*下提供的几个标签类,如Tag.TagSupport.BodyTagSupport.Simpl ...

  2. [Java] JSP笔记 - 自定义标签

    自定义标签的创建步骤: 自定义标签的四大功能: 自定义标签的类结构: 在 1.0 中呢, 可以将 <body-content> 的值设置为 JSP, 2.0中则不允许在自定义标签体中出现j ...

  3. thinkphp自定义标签库

    thinkphp ~ php中 的类, 的成员变量, 本身是没有类型说明的, 那么我怎么知道它的类型呢? 或初始值呢? 通常在类定义中, 如果能给一个初始值的(对于已知简单类型的),最好给一个初始值, ...

  4. 12 自定义标签/JSTL标签库/web国际化/java web之设计模式和案例

    EL应用      自定义一个标签,实现两个字符串的相加 1回顾      1.1servlet生命周期           init(ServletConfig)           service ...

  5. EL函数以及自定义标签的应用

    一.EL函数(调用普通类的静态方法) 编写步骤(自定义EL函数的编写步骤即自定义标签的编写步骤): ①编写一个普通的java类,提供一个静态方法,功能自定,例如下: package cn.wzbril ...

  6. JSTL 自定义标签

    编写描述标签的tld文件,把这个文件放到web-inf/目录下,才能在jsp页面上调用自定义的标签 package test.yz; import java.io.IOException; impor ...

  7. 使用自定义标签模拟jstl的<c:for each>标签

    一.自定义标签的基本编写 下面编写一个自定义标签,它可以输出当前的时间. 1.编写标签类 类可以通过继承SimpleTagSupport类实现一个标签类编写.父类为我们提供了一些编写自定义标签的快捷的 ...

  8. JSP自定义标签/自定义标签打包

    有这样一个业务需求: 当我们在编辑某个用户时,需要设置该用户的角色,在转到编辑页面时,就需要自动勾选上该用户已经选择的角色,如下图: 当我们点击编辑时,会查询用户详细信息,以及角色集合传到编辑页面. ...

  9. JSP自定义标签

    在JSP网页编程中,我们通常不满足于jstl或其他的框架,我们也可以自己写属于自己专用的标签. 在这里介绍一下表格中展示JavaBean的自定义标签的使用 第一步:写一个父标签,用来显示获取数据 新建 ...

随机推荐

  1. JS处理数据四舍五入

    一,使用Math.toFixed toFixed() 方法可把 Number 四舍五入为指定小数位数的数字. 语法NumberObject.toFixed(num) 但是网友说toFixed bug比 ...

  2. redis的常用命令及实例讲解

    使用命令行操作redis 数据类型 字符串String 列表list 使用双向循序链表实现(LinkedList) 散列 Hash 一般应用于将redis作为分布式缓存,存储数据库中的数据对象 集合s ...

  3. 【LeetCode】335. Self Crossing(python)

    Problem:You are given an array x of n positive numbers. You start at point (0,0) and moves x[0] metr ...

  4. windows 下使用 sc 添加创建exe服务;

    SC 是用于与服务控制管理器和服务进行通信的命令行程序. 1.SC 命令 格式 sc <server> [command] [service name] <option1> & ...

  5. promise.all方法合并请求接口的两个值

    function promise1 = new Promise((resolve,reject)=>{ return result1 }) function promise2 = new Pro ...

  6. Kaldi的nnet3

    Nnet3配置中的上下文和块大小 简介 本页讨论了nnet3配置中关于解码和训练的块大小以及左右上下文的某些术语.这将有助于理解一些脚本.目前,从脚本角度来看,没有任何关于nnet3的"概述 ...

  7. linux 扩展根分区

    参考链接:  http://blog.51cto.com/lubcdc/1763133

  8. 《Effective Java中文版(第2版).pdf》-笔记

    1.第6页 ---- Java中Properties类的操作 - bakari - 博客园http://www.cnblogs.com/bakari/p/3562244.html 公有的静态方法返回的 ...

  9. java程序中默认浮点形值常量是什么类型的?如何区分不同类型的浮点型整数值常量?

    java程序中默认浮点形值常量是什么类型的 默认的所有的浮点型数值都是double型

  10. 【转载】TensorFlow学习笔记:共享变量

    原文链接:http://jermmy.xyz/2017/08/25/2017-8-25-learn-tensorflow-shared-variables/ 本文是根据 TensorFlow 官方教程 ...