傳統 Smarty 開發模式:PHP 端讀取資料庫資料,assign 給模板變數,模板再用 foreach 輸出。當資料模組眾多時,PHP 端控制器程式碼冗長難維護。
建立 function.load_data.php 放入 Smarty plugins 目錄,實現模板內直接查詢資料並賦值。
<?php
/**
* Smarty {load_data} function plugin
* @package Smarty
* @subpackage plugins
*/
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']));
// 若指定 assign 參數,將查詢結果賦值給模板變數
if (!empty($params['assign'])) {
$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}
... 輸出 $rec ...
{/foreach}
class 擴充不同資料來源(如 API、快取層)。