首页
编程教程
编程导航
编程百科
编程问答
编程博文
编程实例
硬件设备
网络运营
软件教程
移动数码
办公软件
操作系统
网络运维
设计教程
如何在smarty中增加类似foreach的功能自动加载数据
PHP
2018-12-30
在smarty中使用
自定义
插件
来加载数据(见:
编写Smarty插件在模板中直接加载数据的详细介绍
),在使用的时候还是感觉不够方便,灵机一动就想写成类似foreach那种
标签
:
第一步:在Smarty_Compiler.class.
PHP
的_compile_tag
函数
中
增加
:
<div class="codetitle">
<a style="CURSOR: pointer" data="16572" class="copybut" id="copybut16572" onclick="doCopy('code16572')">
代码
如下:
<div class="codebody" id="code16572">
//加载数据的开始
标签
case 'load':
$this->_push_tag('load');
return $this->_complie_load_start($tag_args);
break;
//加载数据的结束
标签
case '/load':
$this->_pop_tag('load');
return "<?php endforeach; endif; unset(/$_from); ?>";
break;
第二步:
增加
一个
方法
:
<div class="codetitle">
<a style="CURSOR: pointer" data="8286" class="copybut" id="copybut8286" onclick="doCopy('code8286')">
代码
如下:
<div class="codebody" id="code8286">
/*
加载数据
@p
ara
m $tag_args
/
function _complie_load_start($tag_args)
{
$key = substr(md5($tag_args),8,16); //根据参数
生成
一个
特殊的变量名
$attrs = $this->_parse_attrs($tag_args);
//这里可以
增加
更多的处理
$class = (!isset($attrs['class']) || empty($attrs['class'])) ? 'cls_crud' : trim($attrs['class']);
(!isset($attrs['table']) || empty($attrs['table'])) && exit('
table
is empty!');
$db = $class::factory(array('table' => substr($attrs['table'],1,-1)));
//定义新变量
$this->_tpl_vars[$key] = $db->get_block_list(array(substr($attrs['where'],-1)),$attrs['limit']);
$tag_args = "from=/${$key} " . $tag_args;//
调用
foreach
标签
处理
函数
进行处理
return $this->_compile_foreach_start($tag_args);
}
这样就可以在模板中使用load这个
标签
了。
用法
例如:
<div class="codetitle">
<a style="CURSOR: pointer" data="86259" class="copybut" id="copybut86259" onclick="doCopy('code86259')">
代码
如下:
<div class="codebody" id="code86259">
{load table="test" where="
id
<100" limit=10 item=rec}
...
{/load}
foreach
foreach
自动加载数据
相关文章
vue+thinkphp5实现微信扫码支付(NATIVE支付)
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
uniapp+thinkphp5实现微信扫码支付(APP支付)
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
uniapp+thinkphp5实现微信登录
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
【PHP】关于fastadmin框架中使用with进行连表查询时setEagerlyType字段的理解
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
【workerman】uniapp+thinkPHP5使用GatewayWorker实现实时通讯
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
uniapp+thinkphp5实现微信支付(JSAPI支付)
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...