编写Smarty插件在模板中直接加载数据的详细介绍

之前使用smarty的时候,通常是在PHP程序端读取数据(一般从数据库),然后assign给模板的变量,才可以在前端使用这个变量。这样不是不好,只是数据多的时候PHP端的代码维护起来有点麻烦,特别是当存在很多模板块化得数据时。所以写了个插件,结合之前的crud类实现在前端模板可以加载一些模块化得数据。
<div class="codetitle"><a style="CURSOR: pointer" data="15693" class="copybut" id="copybut15693" onclick="doCopy('code15693')"> 代码如下:

<div class="codebody" id="code15693">
<?PHP
/
Smarty plugin
@package Smarty
@subpackage plugins
/
/

Smarty {load_data} function plugin

Type: function

Name: eval

Purpose: evaluate a template variable as a template

@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']));
}
}
?>

写成插件除了可以减少很多维护之后,还有一个显著的好处就是可以在这插件中对查询数据库的操作进行统一的格式化和过滤操作。

<FONT style="COLOR: #ff0000">这样在前端就可以这样加载数据了:

<div class="codetitle"><a style="CURSOR: pointer" data="7407" class="copybut" id="copybut7407" onclick="doCopy('code7407')"> 代码如下:
<div class="codebody" id="code7407">
{load_data assign="list" table="test" where="id<100" limit=10}
{foreach from=$list item=rec}
...
{/foreach}

Smarty插件加载数据模板模板

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...