zoukankan      html  css  js  c++  java
  • ECSHOP添加最新出售商品交易滚动显示功能

    ecshop添 加新功能我感觉无外乎就是两个地方的修改,显示的要修改模板,为了方便下次升级,最好都做成lbi,下次升级了直接把lbi拷进去, 然后稍微修改一下dwt的模板就行了。而对于程序部分的修改,我建议做一个自己的目录,比如dev,然后把自己加的每个功能做成一个php文件放到 dev目录里面,在需要的时候在原来的ecshop的php里面include或者require进来就行了。这样下次系统升级目录一拷,然后在该 include的地方include 一下就ok了,省时省心。当然,我个人建议你维护一个表,用来保存你都在哪些地方做过哪些修改,以方便下次升级的使用。下面我从模板和程序两个 方面说一下需要修改什么地方。

    一、程序层面修改
    我们想要显示的无非就是什么人在什么时间购买了什么东西,这样分析下来我们需要去从数据库读取出来这来信息。 从网上找到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          * 调用获取最新购买者和物品檠?         *
     4          * @access  private
     5          * @return  array
     6          */
     7         function index_get_recent_buy_query()
     8         {
     9             $sql = 'SELECT ecs_users.user_name, ecs_order_goods.goods_id,
    10                      ecs_order_goods.goods_name, order_info.add_time
    11                     FROM ecs_users, 
    12                     (
    13                         SELECT order_id, user_id, add_time
    14                         FROM ecs_order_info
    15                         ORDER BY ecs_order_info.add_time DESC 
    16                         LIMIT 0 , 20
    17                     ) AS order_info, 
    18                     ecs_order_goods
    19                     WHERE order_info.order_id = ecs_order_goods.order_id
    20                     AND order_info.user_id = ecs_users.user_id;';
    21  
    22             $all = $GLOBALS['db']->getAll($sql);
    23  
    24             $arr = array();
    25  
    26             foreach ($all AS $idx => $row)
    27             {
    28                 $arr[$idx]['username']  = $row['user_name'];
    29                 $arr[$idx]['goodName']  = $row['goods_name'];
    30                 $arr[$idx]['goodID']    = $row['goods_id'];
    31                 $arr[$idx]['add_time']  = local_date(
    32                   $GLOBALS['_CFG']['date_format'], $row['add_time']);
    33             }
    34  
    35             return $arr;
    36         } 

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

    1 //获取最新的购买者信息
    2 $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 $invoice_list}-->
     3 <style type="text/css">
     4 .boxCenterList form{display:inline;}
     5 .boxCenterList form a{color:#404040; text-decoration:underline;}
     6 </style>
     7 <div class="box">
     8  <div class="box_1">
     9   <h3><span>{$lang.sale_activities}</span></h3>
    10   <div class="boxCenterList">
    11   <MARQUEE onmouseover=this.stop() onmouseout=this.start() 
    12 scrollAmount=1 direction=up height=155px>
    13     <!-- 发货单查询{foreach from=$recent_buys item=buy_info} -->
    14     <image src='images/speaker.gif'> {$buy_info.username} 在 {$buy_info.add_time} 买了
    15     <a href='goods.php?id={$buy_info.goodID}'> {$buy_info.goodName}</a><br>
    16  
    17    <div class="blank"></div>
    18    <!-- 结束发货单查询{/foreach}-->
    19       </MARQUEE>
    20   </div>
    21  </div>
    22 </div>
    23 <div class="blank5"></div>
    24 <!-- {/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模板绝对的数 据和现实分离,很爽的。
    下面你在你需要显示的地方加入 就可以显示了。

    ------------------------------------------华丽丽的分割线--------------------- ------------------------------------

    源厂制造10-10000级洁净无尘车间防静电防尘用品!网址:http://www.lgfjd.com 微信号:614412
  • 相关阅读:
    模块和包
    网络基础之网络协议
    计算机硬件知识
    面试题集锦(一)
    二分查找法
    ORM多表操作示例
    Django之URL(路由系统)用法
    用Nginx实现微信小程序本地SSL请求
    [PHP7.0-PHP7.2]的新特性和新变更
    利用Node的chokidar 监听文件改变的文件。
  • 原文地址:https://www.cnblogs.com/wangblognet/p/2704139.html
Copyright © 2011-2022 走看看