Tp5自定义标签
'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自定义标签的更多相关文章
- [JSP]自定义标签库taglib
自定义标签的步骤 自定义标签的步骤大概有三步: 1.继承javax.servlet.jsp.tagext.*下提供的几个标签类,如Tag.TagSupport.BodyTagSupport.Simpl ...
- [Java] JSP笔记 - 自定义标签
自定义标签的创建步骤: 自定义标签的四大功能: 自定义标签的类结构: 在 1.0 中呢, 可以将 <body-content> 的值设置为 JSP, 2.0中则不允许在自定义标签体中出现j ...
- thinkphp自定义标签库
thinkphp ~ php中 的类, 的成员变量, 本身是没有类型说明的, 那么我怎么知道它的类型呢? 或初始值呢? 通常在类定义中, 如果能给一个初始值的(对于已知简单类型的),最好给一个初始值, ...
- 12 自定义标签/JSTL标签库/web国际化/java web之设计模式和案例
EL应用 自定义一个标签,实现两个字符串的相加 1回顾 1.1servlet生命周期 init(ServletConfig) service ...
- EL函数以及自定义标签的应用
一.EL函数(调用普通类的静态方法) 编写步骤(自定义EL函数的编写步骤即自定义标签的编写步骤): ①编写一个普通的java类,提供一个静态方法,功能自定,例如下: package cn.wzbril ...
- JSTL 自定义标签
编写描述标签的tld文件,把这个文件放到web-inf/目录下,才能在jsp页面上调用自定义的标签 package test.yz; import java.io.IOException; impor ...
- 使用自定义标签模拟jstl的<c:for each>标签
一.自定义标签的基本编写 下面编写一个自定义标签,它可以输出当前的时间. 1.编写标签类 类可以通过继承SimpleTagSupport类实现一个标签类编写.父类为我们提供了一些编写自定义标签的快捷的 ...
- JSP自定义标签/自定义标签打包
有这样一个业务需求: 当我们在编辑某个用户时,需要设置该用户的角色,在转到编辑页面时,就需要自动勾选上该用户已经选择的角色,如下图: 当我们点击编辑时,会查询用户详细信息,以及角色集合传到编辑页面. ...
- JSP自定义标签
在JSP网页编程中,我们通常不满足于jstl或其他的框架,我们也可以自己写属于自己专用的标签. 在这里介绍一下表格中展示JavaBean的自定义标签的使用 第一步:写一个父标签,用来显示获取数据 新建 ...
随机推荐
- 明白生产环境中的jvm参数
明白生产环境中的jvm参数 写代码的时候,程序写完了,发到线上去运行,跑一段时间后,程序变慢了,cpu负载高了--一堆问题出来了,所以了解一下生产环境的机器上的jvm配置是有必要的.比如说: JDK版 ...
- 基于DSP的IS95正向业务信道模块设计
**定时20ms循环处理话音数据包*** *伪指令不占空间不影响执行速度,只是定义和描述但对汇编链接有重要指示作用 ********************************* .title & ...
- 【51nod 1100】斜率最大
Description 平面上有N个点,任意2个点确定一条直线,求出所有这些直线中,斜率最大的那条直线所通过的两个点. (点的编号为1-N,如果有多条直线斜率相等,则输出所有结果,按照点的X轴坐标 ...
- c# c/s 框架读取的配置文件时是app.exe.config
c# c/s 框架读取的配置文件时是app.exe.config, 一般在bin中间中俄debug中或者Release中
- HTTP 返回状态码
一.HTTP 超文本传输协议 HTTP 是基于客户端/服务端(C/S)的架构模型,通过一个可靠的链接来交换信息,是一个无状态的请求/响应协议. 一个HTTP "客户端"是一个应用程 ...
- nginx 基于uwsgi部署Django
1.安装nginx yum install -y nginx(需要epel源) 2.安装环境 可以考虑使用虚拟化环境,本处不再使用 3.安装uwsgi yum groupinstall "D ...
- c文件操作
文件的基本概念 所谓“文件”是指一组相关数据的有序集合. 这个数据集有一个名称,叫做文件名. 实际上在前面的各章中我们已经多次使用了文件, 例如源程序文件.目标文件.可执行文件.库文件 (头文件)等. ...
- 第25月第5天 Hands-on Machine Learning with Scikit-Learn and TensorFlow
1.apachecn视频(机器学习实战) https://github.com/apachecn/AiLearning https://space.bilibili.com/97678687/#/ch ...
- Apache的域名配置
配置独立域名有什么好处呢?我们在本地做程序开发,要同时用很多开源程序.CMS.框架,或者自己写的管理系统,那么给他们每一个都配置一个独立的域名,在测试的时候只要在浏览器输入设置好的域名就可以了,非常方 ...
- Codeforces Round #545 (Div. 2)(D. Camp Schedule)
题目链接:http://codeforces.com/contest/1138/problem/D 题目大意:给你两个字符串s1和s2(只包含0和1),对于s1中,你可以调换任意两个字符的位置.问你最 ...