'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. Spring整合redis配置文件详解

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  2. luogu 2878 贪心

    其实这题不难,只是想告诉自己:贪心不全是真的脑残拿最大就AC 此题实际上就是比较x,y优先级利用时间计算得到a[i]t/a[i].d(没错时间在上,并非惯性思维的d在上) t*a[x].d+(t+a[ ...

  3. java设计模式之单例模式以及实现的几种方法

    java设计模式以及实现的几种方法,看到比较好的博客文章,收藏起来供以后再次阅读.. 参见:http://www.cnblogs.com/garryfu/p/7976546.html

  4. Spark思维导图之Spark SQL

  5. 【JS】正则向前查找和向后查找

    正向查找:就是匹配前面或后面是什么内容的,所以分类是:正向前查找,正向后查找 负向查找:就是匹配前面或后面不是什么内容的,所以分类是:负向前查找,负向后查找   操作符 说明 描述 (?=exp) 正 ...

  6. 微服务之Spring cloud

    微服务 Spring cloud Spring Cloud provides tools for developers to quickly build some of the common patt ...

  7. AndroidStudio Terminal的使用

    gradlew  assembleDebug  --stacktrace 查看使用的依赖的 Execution failed for task ':app:transformClassesWithMu ...

  8. Linux 学大纲

  9. mybatis中useGeneratedKeys和keyProperty的作用

    在使用mybatis时,常常会出现这种需求: 当主键是自增的情况下,添加一条记录的同时,其主键是不能使用的,但是有时我们需要该主键,这时我们该如何处理呢?这时我们只需要在其对应xml中加入以下属性即可 ...

  10. java jvm和android DVM区别

      本文转自:http://blog.csdn.net/yujun411522/article/details/45932247   1.Android dvm的进程和Linux的进程, 应用程序的进 ...