ECSHOP首页添加滚动显示的交易信息功能

我们想要显示的无非就是什么人在什么时间购买了什么东西,这样分析下来我们需要去从数据库读取出来这来信息。从网上找到ecshop的数据字典,看了看 和咱们相关的表有三个ecs_order_info,ecs_order_goods,ecs_users,分别存储了订单信息,订单对应的商品信息和购买商品的用户信息。这三个表同 user_id,order_id和goods_id三个key来联系,下面我们要写出sql语句从中取出我们需要的那些信息,sql语句如下:

  1. SELECT ecs_users.user_name, ecs_order_goods.goods_id, 
  2.             ecs_order_goods.goods_name, order_info.add_time 
  3.             FROM ecs_users,  
  4.             ( 
  5.                 SELECT order_id, user_id, add_time 
  6.                 FROM ecs_order_info 
  7.                 ORDER BY ecs_order_info.add_time DESC  
  8.                 LIMIT 0 , 20 
  9.             ) AS order_info,  
  10.             ecs_order_goods 
  11.             WHERE order_info.order_id = ecs_order_goods.order_id 
  12.             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模板来使用。 下面给出代码,大家参考一下:

  1. /** 
  2.          * 调用获取最新购买者和物品檠?         * 
  3.          * @access  private 
  4.          * @retu  array 
  5.          */ 
  6.         function index_get_recent_buy_query() 
  7.         { 
  8.             $sql = 'SELECT ecs_users.user_name, ecs_order_goods.goods_id, 
  9.                      ecs_order_goods.goods_name, ecs_order_info.add_time 
  10.                     FROM ecs_users,  
  11.                     ( 
  12.                         SELECT order_id, user_id, add_time 
  13.                         FROM ecs_order_info 
  14.                         ORDER BY ecs_order_info.add_time DESC  
  15.                         LIMIT 0 , 20 
  16.                     ) AS ecs_order_info,  
  17.                     ecs_order_goods 
  18.                     WHERE ecs_order_info.order_id = ecs_order_goods.order_id 
  19.                     AND ecs_order_info.user_id = ecs_users.user_id;'; 
  20.   
  21.             $all = $GLOBALS['db']->getAll($sql); 
  22.   
  23.             $arr = array(); 
  24.   
  25.             foreach ($all AS $idx => $row
  26.             { 
  27.                 $arr[$idx]['useame']  = $row['user_name']; 
  28.                 $arr[$idx]['goodName']  = $row['goods_name']; 
  29.                 $arr[$idx]['goodID']    = $row['goods_id']; 
  30.                 $arr[$idx]['add_time']  = local_date( 
  31.                   $GLOBALS['_CFG']['date_format'], $row['add_time']); 
  32.             } 
  33.   
  34.             retu $arr
  35.         } 

上面代码使用了$GLOBALS['db']->getAll($sql);来获取数据库里面记录,这个db是在init.php里面系统初始化加载好的全局变量,他负责和数据库交互,获取 数据等功能。有时间我写几篇ecshop代码分析的文章,详细讲解一下ecshop的初始化过程,大家就可以了解ecshop高质量的代码了。下面的那个foreach做的而 工作其实就是把数据封装到array,smarty在模板处理时数组友好的。上面只是获取了array,下面的语句是赋值array到smarty模板”

  1. $smarty->assign('recent_buys',     index_get_recent_buy_query());//获取最新的购买者信息 

把这句话加到index.php的类似的地方就可以,基本上在80多行,ecshop集中模板赋值的地方。在面我们来看看赋过去的值smarty模板是怎么用的。

我们建立一个BusinessActivities.lbi来放我们的smarty模板内容。下面是代码:

  1. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
  2. <!--{if $recent_buys}--> 
  3.     <ul>  
  4.     {foreach from=$recent_buys item=buy_info
  5.     <li>· {$buy_info.useame} 在 {$buy_info.add_time} 买了<a href='goods.php?id={$buy_info.goodID}'> {$buy_info.goodName}</a></li> 
  6.    {/foreach} 
  7.     </ul> 
  8. <!-- {/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首页添加滚动显示的交易信息功能

评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)