在ECSHOP首页添加最新生意业务转动显示成果,想要显示的无非就是什么人在什么时间购置了什么对象,这样阐明下来我们需要去从数据库读取出来信息。从网上找到ecshop的数据字典,看了看 和咱们相关的表有三个ecs_order_info,ecs_order_goods,ecs_users,别离存储了订单信息,订单对应的商品信息和购置商品的用户信息。这三个表同 user_id,order_id和goods_id三个key来接洽,下面我们要写出sql语句从中取出我们需要的那些信息,sql语句如下:
SELECT ecs_users.user_name, ecs_order_goods.goods_id,ecs_order_goods.goods_name, order_info.add_time
FROM ecs_users,
(
SELECT order_id, user_id, add_time
FROM ecs_order_info
ORDER BY ecs_order_info.add_time DESC
LIMIT 0 , 20
) AS order_info,
ecs_order_goods
WHERE order_info.order_id = ecs_order_goods.order_id
AND order_info.user_id = ecs_users.user_id;
上面语句的意思从ecs_order_info内里提取前20个生意业务,然后按照order_id,goods_id和user_id的关联来获取用户名、商品名、商品id和订单时间。搞定了sql语句, 下面我们就要凭据ecshop的模式来写个函数,这个函数从通过数据库获取sql语句的内容,然后把这个sql的record封装到一个array内里,传给smarty模板来利用。 下面给出代码,各人参考一下:
/*** 挪用获取最新购置者和物品檠? *
* @access private
* @return array
*/
function index_get_recent_buy_query()
{
$sql = 'SELECT ecs_users.user_name, ecs_order_goods.goods_id,
ecs_order_goods.goods_name, ecs_order_info.add_time
FROM ecs_users,
(
SELECT order_id, user_id, add_time
FROM ecs_order_info
ORDER BY ecs_order_info.add_time DESC
LIMIT 0 , 20
) AS ecs_order_info,
ecs_order_goods
WHERE ecs_order_info.order_id = ecs_order_goods.order_id
AND ecs_order_info.user_id = ecs_users.user_id;';
$all = $GLOBALS['db']->getAll($sql);
$arr = array();
foreach ($all AS $idx => $row)
{
$arr[$idx]['username'] = $row['user_name'];
$arr[$idx]['goodName'] = $row['goods_name'];
$arr[$idx]['goodID'] = $row['goods_id'];
$arr[$idx]['add_time'] = local_date(
$GLOBALS['_CFG']['date_format'], $row['add_time']);
}
return $arr;
}
上面代码利用了$GLOBALS['db']->getAll($sql);来获取数据库内里记录,这个db是在init.php内里系统初始化加载好的全局变量,他认真和数据库交互,获取 数据等成果。有时间我写几篇ecshop代码阐明的文章,具体讲授一下ecshop的初始化进程,各人就可以相识ecshop高质量的代码了。下面的谁人foreach做的而 事情其实就是把数据封装到array,smarty在模板处理惩罚时数组友好的。上面只是获取了array,下面的语句是赋值array到smarty模板”
$smarty->assign('recent_buys', index_get_recent_buy_query());//获取最新的购置者信息把这句话加到index.php的雷同的处所就可以,根基上在80多行,ecshop会合模板赋值的处所。在面我们来看看赋已往的值smarty模板是怎么用的。
我们成立一个BusinessActivities.lbi来放我们的smarty模板内容。下面是代码:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"><!--{if $recent_buys}-->
<ul>
{foreach from=$recent_buys item=buy_info}
<li>· {$buy_info.username} 在 {$buy_info.add_time} 买了<a href='http://down.chinaz.com/goods.php?id={$buy_info.goodID}'> {$buy_info.goodName}</a></li>
{/foreach}
</ul>
<!-- {/if} -->
各人留意看上面的是来说明你的模板内容根基信息的,我这里是utf8,假如你是gbk,要改成gbk哦。 是和我们上面php措施内里的$smarty->assign(’recent_buys’, index_get_recent_buy_query())对应的,若果你给recent_buys赋值, 而且这个值不为空可能0的话才显示咱们的模板内容。我们重点看,foreach是smarty模板内置函数,其 主要浸染是遍历传入的数组,然后生成内容,雷同于其他语言内里的foreach。这句话就是遍历recent_buys,然后把每次遍历的项做buy_info,其实这个buy_info 就是咱们数据的2维数组的第二维了。你可以直接用{$buy_info.goodName}这种形式来挪用你数组传入的内容。用smarty模板绝对的数据和现实疏散,很爽的。
下面你在你需要显示的处所插手就可以显示了。
提示:sql挪用的时候必然要留意表名要换成你本身的表名
ECShop下载:
ECShop GBK v2.7.3 Release 1106下载