我要订购
咨询热线 151 211 59949
当前位置: 首页 > 最新公告 > ECSHOP模板在首页调用指定分类的热销、推荐、新品商品

浏览历史




ECSHOP模板在首页调用指定分类的热销、推荐、新品商品
韩樟树网站网店设计工作室 / 2010-05-01

在首页出现,无疑我们肯定要传进去一个分类ID,如果还要指定为热销,就要传进去hot参数,EC系统是带有一个这样的函数的在includes/lib_goods.php中有如下函数

  1. /**
     
  2. * 获得指定分类下的推荐商品
     
  3. *
     
  4. * @access  public
     
  5. * @param   string      $type       推荐类型,可以是 best, new, hot, promote
     
  6. * @param   string      $cats       分类的ID
     
  7. * @param   integer     $brand      品牌的ID
     
  8. * @param   integer     $min        商品价格下限
     
  9. * @param   integer     $max        商品价格上限
     
  10. * @param   string      $ext        商品扩展查询
     
  11. * @return  array
     
  12. */
     
  13. function get_category_recommend_goods($type = '', $cats = '', $brand = 0, $min =0,  $max = 0, $ext='')
     
  14. {
     
  15.     $brand_where = ($brand > 0) ? " AND g.brand_id = '$brand'" : '';
     

  16.  
  17.     $price_where = ($min > 0) ? " AND g.shop_price >= $min " : '';
     
  18.     $price_where .= ($max > 0) ? " AND g.shop_price <= $max " : '';
     

  19.  
  20.     $sql =  'SELECT g.goods_id, g.goods_name, g.goods_name_style, g.market_price, g.shop_price AS org_price, g.promote_price, ' .
     
  21.                 "IFNULL(mp.user_price, g.shop_price * '$_SESSION[discount]') AS shop_price, ".
     
  22.                 'promote_start_date, promote_end_date, g.goods_brief, g.goods_thumb, goods_img, b.brand_name ' .
     
  23.             'FROM ' . $GLOBALS['ecs']->table('goods') . ' AS g ' .
     
  24.             'LEFT JOIN ' . $GLOBALS['ecs']->table('brand') . ' AS b ON b.brand_id = g.brand_id ' .
     
  25.             "LEFT JOIN " . $GLOBALS['ecs']->table('member_price') . " AS mp ".
     
  26.                     "ON mp.goods_id = g.goods_id AND mp.user_rank = '$_SESSION[user_rank]' ".
     
  27.             'WHERE g.is_on_sale = 1 AND g.is_alone_sale = 1 AND g.is_delete = 0 ' . $brand_where . $price_where . $ext;
     
  28.     $num = 0;
     
  29.     $type2lib = array('best'=>'recommend_best', 'new'=>'recommend_new', 'hot'=>'recommend_hot', 'promote'=>'recommend_promotion');
     
  30.     $num = get_library_number($type2lib[$type]);
     

  31.  
  32.     switch ($type)
     
  33.     {
     
  34.         case 'best':
     
  35.             $sql .= ' AND is_best = 1';
     
  36.             break;
     
  37.         case 'new':
     
  38.             $sql .= ' AND is_new = 1';
     
  39.             break;
     
  40.         case 'hot':
     
  41.             $sql .= ' AND is_hot = 1';
     
  42.             break;
     
  43.         case 'promote':
     
  44.             $time = gmtime();
     
  45.             $sql .= " AND is_promote = 1 AND promote_start_date <= '$time' AND promote_end_date >= '$time'";
     
  46.             break;
     
  47.     }
     

  48.  
  49.     if (!empty($cats))
     
  50.     {
     
  51.         $sql .= " AND (" . $cats . " OR " . get_extension_goods($cats) .")";
     
  52.     }
     

  53.  
  54.     $order_type = $GLOBALS['_CFG']['recommend_order'];
     
  55.     $sql .= ($order_type == 0) ? ' ORDER BY g.sort_order, g.last_update DESC' : ' ORDER BY RAND()';
     
  56.     $res = $GLOBALS['db']->selectLimit($sql, $num);
     

  57.  
  58.     $idx = 0;
     
  59.     $goods = array();
     
  60.     while ($row = $GLOBALS['db']->fetchRow($res))
     
  61.     {
     
  62.         if ($row['promote_price'] > 0)
     
  63.         {
     
  64.             $promote_price = bargain_price($row['promote_price'], $row['promote_start_date'], $row['promote_end_date']);
     
  65.             $goods[$idx]['promote_price'] = $promote_price > 0 ? price_format($promote_price) : '';
     
  66.         }
     
  67.         else
     
  68.         {
     
  69.             $goods[$idx]['promote_price'] = '';
     
  70.         }
     

  71.  
  72.         $goods[$idx]['id']           = $row['goods_id'];
     
  73.         $goods[$idx]['name']         = $row['goods_name'];
     
  74.         $goods[$idx]['brief']        = $row['goods_brief'];
     
  75.         $goods[$idx]['brand_name']   = $row['brand_name'];
     
  76.         $goods[$idx]['short_name']   = $GLOBALS['_CFG']['goods_name_length'] > 0 ?
     
  77.                                        sub_str($row['goods_name'], $GLOBALS['_CFG']['goods_name_length']) : $row['goods_name'];
     
  78.         $goods[$idx]['market_price'] = price_format($row['market_price']);
     
  79.         $goods[$idx]['shop_price']   = price_format($row['shop_price']);
     
  80.         $goods[$idx]['thumb']        = get_image_path($row['goods_id'], $row['goods_thumb'], true);
     
  81.         $goods[$idx]['goods_img']    = get_image_path($row['goods_id'], $row['goods_img']);
     
  82.         $goods[$idx]['url']          = build_uri('goods', array('gid' => $row['goods_id']), $row['goods_name']);
     

  83.  
  84.         $goods[$idx]['short_style_name'] = add_style($goods[$idx]['short_name'], $row['goods_name_style']);
     
  85.         $idx++;
     
  86.     }
     

  87.  
  88.     return $goods;
     
  89. }
复制代码

如果通过这个函数在index.php中smarty是可以的

  1. $smarty->assign('chot_goods_35',   get_category_recommend_goods('hot','35'));     //指定分类下的热销商品
复制代码

其中hot指明为调用热销商品,35指定分类然后在index.dwt中调用
<!--{foreach from=$chot_goods_35 item=goods}-->
         <div style="padding-top: 8px;" class="new-tr">
           <a target="_blank" href="{$goods.url}"><img width="116" height="130" border="0" alt="{$goods.name|escape:html}" src="{$goods.thumb}"></a>
          <div class="right">
          <a target="_blank" href="{$goods.url}">{$goods.name|escape:html}</a><br>
          <span style="color: rgb(102, 102, 102); text-decoration: line-through;">市场价:{$goods.market_price}</span><br>
          特卖价:<span style="color: rgb(255, 0, 0);">{$goods.shop_price}</span><br>
          <span class="font-gmm"><a  href="javascript:addToCart({$goods.id})">立即抢购</a></span>
          </div>
          <span class="new-line"></span>
          </div>
           <!--{/foreach}-->
如果你测试下就会发现你调出的是所有商品的热销,不论你传进什么分类ID,它默认调出的都是所有商品的热销我们打印下SQL,然后到后台查询下发现也是调用的所有分类下的热销商品问题在于function get_category_recommend_goods这个函数中的if (!empty($cats))    {        $sql .= " AND (" . $cats . " OR " . get_extension_goods($cats) .")";    }这一句没起到作用,根本没有检索出所在分类ID下的热销改动方法将

  1. $sql =  'SELECT g.goods_id,g.goods_name, g.goods_name_style, g.market_price, g.shop_price AS org_price, g.promote_price, ' .
复制代码

改为

  1. $sql =  'SELECT g.goods_id,g.cat_id,g.goods_name, g.goods_name_style, g.market_price, g.shop_price AS org_price, g.promote_price, ' .
复制代码

查询出g.cat_id是商品的分类ID,然后把

  1. if (!empty($cats))
     
  2.     {
     
  3.         $sql .= " AND (" . $cats. " OR " . get_extension_goods($cats) .")";
     
  4.     }
复制代码

改为

  1. if (!empty($cats))
     
  2.     {
     
  3.         $sql .= " AND (g.cat_id =" . $cats. " OR " . get_extension_goods($cats) .")";
     
  4.     }
复制代码

加个限制,将ID为$cats的所有热销查询出来,也就是你要指定的分类ID下的热销商品然后在index.php中找到

  1. $smarty->assign('best_goods',      get_recommend_goods('best'));    // 推荐商品
     
  2.     $smarty->assign('new_goods',       get_recommend_goods('new'));     // 最新商品
     
  3.     $smarty->assign('hot_goods',       get_recommend_goods('hot'));     // 热点文章
复制代码

在下面加一个smarty$smarty->assign('chot_goods_35',   get_category_recommend_goods('hot','35'));     //指定分类下的热销商品注意35是商品的最终分类ID,不是一级分类,二级分类ID,调出的也是这个二级分类所有的热销然后在模板中调用
<!--{foreach from=$chot_goods_35 item=goods}-->
         <div style="padding-top: 8px;" class="new-tr">
           <a target="_blank" href="{$goods.url}"><img width="116" height="130" border="0" alt="{$goods.name|escape:html}" src="{$goods.thumb}"></a>
          <div class="right">
          <a target="_blank" href="{$goods.url}">{$goods.name|escape:html}</a><br>
          <span style="color: rgb(102, 102, 102); text-decoration: line-through;">市场价:{$goods.market_price}</span><br>
          特卖价:<span style="color: rgb(255, 0, 0);">{$goods.shop_price}</span><br>
          <span class="font-gmm"><a  href="javascript:addToCart({$goods.id})">立即抢购</a></span>
          </div>
          <span class="new-line"></span>
          </div>
           <!--{/foreach}-->以上方法实现的是子分类的热销商品调用,如果要实现一级分类的调用见2楼
以把SQL语句改一下,与category表关联即可将

  1. $sql =  'SELECT g.goods_id,g.goods_name, g.goods_name_style,
     
  2. g.market_price, g.shop_price AS org_price, g.promote_price, ' .
复制代码

改为

  1.   $sql =  'SELECT g.goods_id,g.cat_id,c.parent_id,g.goods_name, g.goods_name_style, g.market_price, g.shop_price AS org_price, g.promote_price, ' .
复制代码

再在

  1. 'LEFT JOIN ' . $GLOBALS['ecs']->table('brand') . ' AS b ON b.brand_id = g.brand_id ' .
复制代码

下加一句

  1. 'LEFT JOIN ' . $GLOBALS['ecs']->table('category') . ' AS c ON c.cat_id = g.cat_id ' .
复制代码

然后将

  1. if (!empty($cats))
     
  2.     {
     
  3.         $sql .= " AND (" . $cats . " OR " . get_extension_goods($cats) .")";
     
  4.     }
复制代码

改为

  1. if (!empty($cats))
     
  2.     {
     
  3.         $sql .= " AND (c.parent_id =" . $cats. " OR " . get_extension_goods($cats) .")";
     
  4.     }
复制代码

这个是和分类表建立关联,调出商品所在分类的上级分类
然后在index.php中 smarty

  1. $smarty->assign('chot_goods_35',   get_category_recommend_goods('hot','35'));     //指定分类下的热销商品
复制代码

注意这个35是一级分类的ID,然后在模板中调用即可
<!--{foreach from=$chot_goods_35 item=goods}-->
         <div style="padding-top: 8px;" class="new-tr">
           <a target="_blank" href="{$goods.url}"><img width="116" height="130" border="0" alt="{$goods.name|escape:html}" src="{$goods.thumb}"></a>
          <div class="right">
          <a target="_blank" href="{$goods.url}">{$goods.name|escape:html}</a><br>
          <span style="color: rgb(102, 102, 102); text-decoration: line-through;">市场价:{$goods.market_price}</span><br>
          特卖价:<span style="color: rgb(255, 0, 0);">{$goods.shop_price}</span><br>
          <span class="font-gmm"><a  href="javascript:addToCart({$goods.id})">立即抢购</a></span>
          </div>
          <span class="new-line"></span>
          </div>
           <!--{/foreach}-->
同理,新品,推荐都可以调,只要把hot改为new 或者best就可以了欢迎大家跟帖讨论,交流无止境



声明:本文部分资料来源网络,如有侵权请及时告之,我们会尽快处理。

 

用户评论(共0条评论)

  • 暂时还没有任何用户评论
总计 0 个记录,共 1 页。 第一页 上一页 下一页 最末页
用户名: 匿名用户
E-mail:
评价等级:
评论内容:
验证码: captcha