编写Smarty插件在模板中直接加载数据的详细介绍
时间:2023-11-15 09:14:47
之前使用smarty的时候,通常是在php程序端读取数据(一般从数据库),然后assign给模板的变量,才可以在前端使用这个变量。这样不是不好,只是数据多的时候php端的代码维护起来有点麻烦,特别是当存在很多模板块化得数据时。
所以写了个插件,结合之前的crud类实现在前端模板可以加载一些模块化得数据。
<?php
/**
* Smarty plugin
* @package Smarty
* @subpackage plugins
*/
/**
* Smarty {load_data} function plugin
*
* Type: function<br>
* Name: eval<br>
* Purpose: evaluate a template variable as a template<br>
* @link http://smarty.php.net/manual/en/language.function.eval.php {eval}
* @param array
* @param Smarty
*/
function smarty_function_load_data($params, &$smarty)
{
$class = (!isset($params['class']) || empty($params['class'])) ? 'cls_crud' : trim($params['class']);
(!isset($params['table']) || empty($params['table'])) && exit('`table` is empty!');
$db = $class::factory(array('table' => $params['table']));
//var_dump($params);
if (!empty($params['assign'])) {
//把数据赋值给变量$params['assign'],这样前端就可以使用这个变量了(例如可以结合foreach输出一个列表等)
$smarty->assign($params['assign'], $db->get_block_list(array($params['where']), $params['limit']));
}
}
?>
写成插件除了可以减少很多维护之后,还有一个显著的好处就是可以在这个插件中对查询数据库的操作进行统一的格式化和过滤操作。
这样在前端就可以这样加载数据了:
{load_data assign="list" table="test" where="`id`<100" limit=10}
{foreach from=$list item=rec}
...
{/foreach}
标签:Smarty插件,模板,加载数据
0
投稿
猜你喜欢
实例解析:MySQL 实例管理器识别的命令
2009-02-23 17:33:00
python 实现的发送邮件模板【普通邮件、带附件、带图片邮件】
2023-10-07 00:52:22
JS中的public和private对象,即static修饰符
2023-08-29 21:53:13
numpy给array增加维度np.newaxis的实例
2023-06-30 06:41:34
PHP如何实现HTTP验证
2023-09-04 05:32:46
js调用flash代码
2010-01-23 12:35:00
div中class与id的区别及应用
2007-09-22 08:37:00
ASP写的不错的"数字分页"涵数
2008-10-19 17:21:00
oracle下一条SQL语句的优化过程(比较详细)
2010-04-22 16:58:00
关于网站地图
2011-01-06 12:14:00
不成熟的标准化是我们唯一惧怕的
2008-08-15 18:55:00
用户体验杂谈
2011-10-21 21:09:08
教你快速掌握更改表中列顺序的好方法
2008-11-27 17:14:00
获取一个数字的个位、十位、百位的函数代码
2011-02-20 11:06:00
Python实现对图像加噪(高斯噪声 椒盐噪声)
2023-06-15 03:08:34
asp如何让服务器延时执行更改后的数据?
2010-05-13 16:35:00
PHP中phar包的使用教程
2023-11-09 19:55:52
何在MySQL数据库中定义外键
2009-12-17 12:29:00
PyTorch中apex安装方式和避免踩坑
2023-06-20 15:19:57
学习ASP.NET八天入门:第二天
2007-08-07 13:24:00