編寫Smarty插件在模板中直接加載數(shù)據(jù)的詳細(xì)介紹
更新時間:2013年06月26日 09:48:08 作者:
本篇文章是對編寫Smarty插件在模板中直接加載數(shù)據(jù)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
之前使用smarty的時候,通常是在php程序端讀取數(shù)據(jù)(一般從數(shù)據(jù)庫),然后assign給模板的變量,才可以在前端使用這個變量。這樣不是不好,只是數(shù)據(jù)多的時候php端的代碼維護(hù)起來有點(diǎn)麻煩,特別是當(dāng)存在很多模板塊化得數(shù)據(jù)時。
所以寫了個插件,結(jié)合之前的crud類實現(xiàn)在前端模板可以加載一些模塊化得數(shù)據(jù)。
<?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'])) {
//把數(shù)據(jù)賦值給變量$params['assign'],這樣前端就可以使用這個變量了(例如可以結(jié)合foreach輸出一個列表等)
$smarty->assign($params['assign'], $db->get_block_list(array($params['where']), $params['limit']));
}
}
?>
寫成插件除了可以減少很多維護(hù)之后,還有一個顯著的好處就是可以在這個插件中對查詢數(shù)據(jù)庫的操作進(jìn)行統(tǒng)一的格式化和過濾操作。
這樣在前端就可以這樣加載數(shù)據(jù)了:
{load_data assign="list" table="test" where="`id`<100" limit=10}
{foreach from=$list item=rec}
...
{/foreach}
所以寫了個插件,結(jié)合之前的crud類實現(xiàn)在前端模板可以加載一些模塊化得數(shù)據(jù)。
復(fù)制代碼 代碼如下:
<?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'])) {
//把數(shù)據(jù)賦值給變量$params['assign'],這樣前端就可以使用這個變量了(例如可以結(jié)合foreach輸出一個列表等)
$smarty->assign($params['assign'], $db->get_block_list(array($params['where']), $params['limit']));
}
}
?>
寫成插件除了可以減少很多維護(hù)之后,還有一個顯著的好處就是可以在這個插件中對查詢數(shù)據(jù)庫的操作進(jìn)行統(tǒng)一的格式化和過濾操作。
這樣在前端就可以這樣加載數(shù)據(jù)了:
復(fù)制代碼 代碼如下:
{load_data assign="list" table="test" where="`id`<100" limit=10}
{foreach from=$list item=rec}
...
{/foreach}
相關(guān)文章
php swoole多進(jìn)程/多線程用法示例【基于php7nts版】
這篇文章主要介紹了php swoole多進(jìn)程/多線程用法,結(jié)合實例形式分析了基于php7nts版使用swoole進(jìn)行多線程創(chuàng)建、調(diào)用相關(guān)操作技巧,需要的朋友可以參考下2019-08-08PHP strip_tags保留多個HTML標(biāo)簽的方法
這篇文章主要介紹了PHP strip_tags保留多個HTML標(biāo)簽的方法,需要的朋友可以參考下2016-05-05基于PHP實現(xiàn)JWT登錄鑒權(quán)的示例代碼
JWT(JSON Web Token)是為了在網(wǎng)絡(luò)應(yīng)用環(huán)境間傳遞聲明而執(zhí)行的一種基于JSON的開放標(biāo)準(zhǔn)。本文將為大家介紹PHP如何實現(xiàn)JWT登錄鑒權(quán),需要的可以參考一下2022-04-04