之前使用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 {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`<" limit=}
{foreach from=$list item=rec}
{/foreach}