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.就是这么来的。
所有的调用,就是这个机制。