ecshop 商品列表页面 按销量排行

2016-07-07 14:55 来源:www.chinab4c.com 作者:ecshop专家

商品列表页面的按上架时间、价格、更新时间是默认的,现在需要添加的是按销量排行,但是在商品表里面没有销量的字段,这样的话,必须二次开发才可以解决。

网上搜索了老半天,没有解决问题,唯一有线索的是,二次开发需要支付200元的。

研究了半天,终于解决了,现在分享给大家。

STEP1:在表“ecs_goods”添加字段:salesnum(注:自定义字段名)

STEP2:打开根目录下文件:flow.php

找到下面的代码:

/* 插入订单商品 */
$sql = “INSERT INTO ” . $ecs->table(’order_goods’) . “( ” .
“order_id, goods_id, goods_name, goods_sn, product_id, goods_number, market_price, “.
“goods_price, goods_attr, is_real, extension_code, parent_id, is_gift, goods_attr_id) “.
” SELECT ‘$new_order_id’, goods_id, goods_name, goods_sn, product_id, goods_number, market_price, “.
“goods_price, goods_attr, is_real, extension_code, parent_id, is_gift, goods_attr_id”.
” FROM ” .$ecs->table(’cart’) .
” WHERE session_id = ‘”.SESS_ID.”‘ AND rec_type = ‘$flow_type’”;
$db->query($sql);

在这段代码的下面,添加如下代码:

/* 插入商品表的salesnum 字段,统计销量排行 */
$sql = “update ” . $ecs->table(’goods’) . ” set salesnum=salesnum +”.
” (SELECT goods_number”.
” FROM ” .$ecs->table(’cart’) .
” WHERE session_id = ‘”.SESS_ID.”‘ AND rec_type = ‘$flow_type’) where goods_id=”.
” (SELECT goods_id”.
” FROM ” .$ecs->table(’cart’) .
” WHERE session_id = ‘”.SESS_ID.”‘ AND rec_type = ‘$flow_type’)”;
$db->query($sql);

STEP3:打开文件:default\library\goods_list.lbi,找到下面的代码:

<a href=”category.php?category={$category}&display={$pager.display}&brand={$brand_id}&price_min={$price_min}&price_max={$price_max}&filter_attr={$filter_attr}&page={$pager.page}&sort=last_update&order=<!– {if $pager.sort == ‘last_update’ && $pager.order == ‘DESC’} –>ASC<!– {else} –>DESC<!– {/if} –>#goods_list”><img src=”images/last_update_<!– {if $pager.sort == ‘last_update’} –>{$pager.order}<!– {else} –>default<!– {/if} –>.gif” alt=”{$lang.sort.last_update}”></a>

在上面那段代码的下面添加:

<a href=”category.php?category={$category}&display={$pager.display}&brand={$brand_id}&price_min={$price_min}&price_max={$price_max}&filter_attr={$filter_attr}&page={$pager.page}&sort=salesnum&order=<!– {if $pager.sort == ’salesnum’ && $pager.order == ‘DESC’} –>ASC<!– {else} –>DESC<!– {/if} –>#goods_list”><img src=”images/sales_<!– {if $pager.sort == ’salesnum’} –>{$pager.order}<!– {else} –>default<!– {/if} –>.gif” alt=”按销量排行”></a>

两段代码的区别,自己去分析看看吧。

STEP4:打开文件:category.php,找到如下代码:

$sort= (isset($_REQUEST['sort'])&& in_array(trim(strtolower($_REQUEST['sort'])), array(’goods_id’, ’shop_price’, ‘last_update’)))

修改为:

$sort= (isset($_REQUEST['sort'])&& in_array(trim(strtolower($_REQUEST['sort'])), array(’goods_id’, ’shop_price’, ‘last_update’,’salesnum’)))

OK!

就是如此之简单。

转自:http://www.pksafe.cn/blog/677.html

回答:
好东西 支持



== 我试了一下,上面代码有个问题:
买一种商品还好,要是买多种商品,点击确认订单就会报错:
  1. MySQL server error report:Array ( [0] => Array ( [message] => MySQL Query Error ) [1] => Array ( [sql] => update `ec_mall`.`ec_goods` set salesnum=salesnum + (SELECT goods_number FROM `ec_mall`.`ec_cart` WHERE session_id = '09a835d6f861b5953f5fceb74b8ffbcc' AND rec_type = '0') where goods_id= (SELECT goods_id FROM `ec_mall`.`ec_cart` WHERE session_id = '09a835d6f861b5953f5fceb74b8ffbcc' AND rec_type = '0') ) [2] => Array ( [error] => Subquery returns more than 1 row ) [3] => Array ( [errno] => 1242 ) )
复制代码
请问怎么解决?

这哥们是抄的。。~

好心人,辛苦了!!!

很想搞一个商城,不知道怎么弄啊

测试可用了吗 顶一个 支持共享

//解决三楼的问题。
$sql = "update " .$GLOBALS['ecs']->table('goods') . " AS a, ".$GLOBALS['ecs']->table('cart') . " AS b ".
" set a.saleqt= a.saleqt + b.goods_number".
" WHERE a.goods_id=b.goods_id AND b.session_id = '".SESS_ID."' AND b.rec_type = '$flow_type'";

$db->query($sql);

感谢ls,测试成功,确实解决了3l的问题

补充一下,saleqt换成salesnum即可

你这个方法有点搓,本身数据库表不能随意更换添加字段。而且每次排序还要进行数据库的写入操作。我建议还是每次进行排序的时候,将商品表左连接订单表(count()方法),然后根据销售数量排序

学习下!!!!


这办法好用吗?图标显示不出来,怎么弄?

学习一下




我个人也比较赞同11楼的看法,其实数据库根本没有必要在新增一字段,那样操作反而复杂化。只是为了一个销量排行就要增加字段,太不值了。
完全可以使用表的关联性 实现