Ecshop 中的assign_dynamic($tmp)函數分析
近日需要在ecshop中新增一個php頁面,里面涉及到一些動態文章內容的調用。
因為之前沒有做過所以就對照index.php來寫了。首先自己新增了一個dwt文件,在里面設置一個可編輯區域。在admin/includes /lib_template.php里面,在$template_files這個數組中添加了一個可以設置內容的模板,news.dwt, 在$page_libs這個每個模板允許設置的庫項目的數組里面添加了’news’ => array(
‘/library/ur_here.lbi’ => 0,
‘/library/cart.lbi’ => 0,
‘/library/category_tree.lbi’ => 0,
‘/library/history.lbi’ => 0,
‘/library/pages.lbi’ => 0,
‘/library/exchange_hot.lbi’ => 5,
‘/library/exchange_list.lbi’ => 0,
),然后在后臺”設置模板”這里,在languages/zh_cn/admin/template.php里面對這個模板文件添加相應的語言,$_LANG['template_files']['news'] = ‘新聞頁面’;
經過以上這樣設置之后,在”后臺模板”—“設置模板”這里的下拉框這里就可以看到這個新添加的模板了。測試發現,如果想在這個頁面內顯示一些動態的內容。就必須加上:assign_dynamic(‘news’).
assign_dynamic($tmp)這個函數的作用是活的指定頁面的動態內容,動態處理一些 局部信息更新而不被緩存的機制,其中$tmp為模板名稱。
$sql = ‘SELECT id, number, type FROM ‘ . $GLOBALS['ecs']->table(‘template’) . ” WHERE filename = ‘$tmp’ AND type > 0 AND remarks =” AND theme=’” . $GLOBALS['_CFG']['template'] . “‘”;$res = $GLOBALS['db']->getAll($sql) 其中字段number控制每次顯示多少個值,而字段type則控制屬于哪個動態項,0為 固定項,1為分類下的商品,2為品牌下的商品,3為文章列表,4為廣告位.
通過過這個條件,分別執行相應的函數,例如用$GLOBALS[‘smarty’]->assign(‘goods_cat_’.$row[‘id’],assign_cat_goods($row[‘id’],$row[‘number’])); 給不同的模塊賦值。比如在分類,就調用ssign_cat_goods()函數,傳遞給模板參數’goods_cat_’ . $row['id'].
在最后ecshop smarty將會調用dyna_libs_replace()函數,對不同的模塊,給予template,通過例如 $str = ‘{assign var=”cat_goods” value=$cat_goods_’ .$row['id']. ‘}{assign var=”goods_cat” value=$goods_cat_’ .$row['id']. ‘}’;方式傳遞。所以在模板里面,可以看到$cat_goods.就是這么來的。
所有的調用,就是這個機制。