【老杨原创】ECSHOP自定义销量,分类页、搜索页实现销量、评论数排序功能

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



近来发现按销量排序的功能需求度呼声很高,老杨在这里整理一个比较完整的有关ECSHOP销量的一系统二次开发教程,另外根据大家的具体反馈情况,老杨还会不定期的做此帖的更新,进行功能完善。注,此功能在比较早的时候就已经整合进入了LYECSHOOP v1.0.1(老杨版ECSHOP)中,有实力的电商朋友可以联系老杨整站开发。
更新时间:2014-7-10,之前的方法存在一个很大的问题!已修改!另外sele ct 这个确实是编辑不出来,所以大家处行去掉中间的空格吧!
老杨版ECSHOP销量排序效果:



功能简述:
销量排序此功能本来确实可以不进行数据库操作,但从执行效率来讲,所以还是考虑给数据库添加一个goods_basesell字段,大家不要怕麻烦,添加方法很简单,管理后台的“SQL查询”就可以完成。
1、后台->数据库->SQL查询
输入并执行以下代码

  1. ALTER
  2. TABLE `ecs_goods` ADD `goods_basesell` INT( 11 ) unsigned NOT NULL DEFAULT '0'
  3. AFTER `cat_id` ;
复制代码


2、修改分类文件 ,根目/category.php

查找:

  1. $sort=
  2. (isset($_REQUEST['sort'])&&
  3. in_array(trim(strtolower($_REQUEST['sort'])), array('goods_id',
  4. 'shop_price', 'last_update'))) ? trim($_REQUEST['sort']):
  5. $default_sort_order_type;
复制代码

替换为:

  1. $sort=
  2. (isset($_REQUEST['sort'])&&
  3. in_array(trim(strtolower($_REQUEST['sort'])), array('goods_id',
  4. 'shop_price', 'comment','last_update','selled'))) ?
  5. trim($_REQUEST['sort']): 'last_update';
复制代码
comment是评论数,有需要的朋友也可以加上,功能先实现。

继续修改,查找:
  1. /* 获得商品列表 */
复制代码
在其上面添加以下代码:
  1. /*老杨ecshop http://www.lyecs.com*/
  2. if ($sort == 'selled' )
  3. {
  4. $sql_sort = " ORDER BY g.goods_basesell DESC ";
  5. $sql_order = "";
  6. }else{
  7. $sql_sort = " ORDER BY " .$sort;
  8. $sql_order = $order;
  9. }
复制代码
查找:
  1. "WHERE $where $ext ORDER BY $sort $order";
复制代码
替换为:
  1. "WHERE $where $ext $sql_sort $sql_order";
复制代码
查找:
  1. $sql = 'sele ct g.goods_id, g.goods_name,
复制代码
替换为:
  1. $sql = 'sele ct g.goods_id, g.goods_name,g.goods_basesell
复制代码
3、includes/lib_common.php文件尾部?>前添加两个函数:
  1. function selled_count($goods_id)
  2. {
  3. $sql= "sele ct goods_basesell from ".$GLOBALS['ecs']->table('goods')."where goods_id ='".$goods_id."'";
  4. $res = $GLOBALS['db']->getOne($sql);
  5. return $res>0 ? $res :0;
  6. }
  7. function com_count($goods_id)
  8. {
  9. $sql= "sele ct count(*) as count from ".$GLOBALS['ecs']->table('comment')." where id_value='".$goods_id."'";
  10. $res = $GLOBALS['db']->getOne($sql);
  11. return $res>0 ? $res :0;
  12. }
复制代码
4、然后就是添加前台的按钮,这里各个模板的样式不一样,很难统一,所以老杨就先只提供原模板的文字按钮供参考了:
模板目录/library/goods_list.lbi
找到:
和下面代码类似的代码的下面(没办法,字数过限)
在其下面添加以下代码:
  1. <a

  2. href="{$script_name}.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=selled&order=<!--
  3. {if $pager.sort == 'selled' && $pager.order == 'DESC'}
  4. -->ASC<!-- {else} -->DESC<!-- {/if}
  5. -->#goods_list"><img src="images/selled_<!-- {if
  6. $pager.sort == 'selled'} -->{$pager.order}<!-- {else}
  7. -->default<!-- {/if} -->.gif" alt="按销量"></a>
  8. <a

  9. href="{$script_name}.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=comment&order=<!--
  10. {if $pager.sort == 'comment' && $pager.order == 'DESC'}
  11. -->ASC<!-- {else} -->DESC<!-- {/if}
  12. -->#goods_list"><img src="images/comment_<!-- {if
  13. $pager.sort == 'comment'} -->{$pager.order}<!-- {else}
  14. -->default<!-- {/if} -->.gif" alt="按评论"></a>
复制代码
这里有六张图没有提供,希望大家自己根据自身模板做一下:
selled_ASC.gif
selled_DESC.gif
selled_default.gif
comment_ASC.gif
comment_DESC.gif
comment_default.gif
(11楼的朋友分享了一套)
OK,分类页的就好了,搜索页的同理,等有时间老杨再补详细的。

5、admin/goods.php
找到:
  1. /*------------------------------------------------------ */
  2. //-- 修改上架状态
  3. /*------------------------------------------------------ */
  4. elseif ($_REQUEST['act'] == 'toggle_on_sale')
  5. {
复制代码
在其上面添加以下代码:
  1. /*老杨ecshop http://www.lyecs.com*/
  2. elseif ($_REQUEST['act'] == 'edit_selled_count')
  3. {
  4. check_authz_json('goods_manage');

  5. $goods_id= intval($_POST['id']);
  6. $selled_count= intval($_POST['val']);

  7. if($selled_count < 0 || $selled_count == 0 && $_POST['val'] != "$selled_count")
  8. {
  9. make_json_error('数量错误');
  10. }

  11. if(check_goods_product_exist($goods_id) == 1)
  12. {
  13. make_json_error($_LANG['sys']['wrong'] . $_LANG['cannot_goods_number']);
  14. }

  15. if ($exc->edit("goods_basesell = '$selled_count', last_update=" .gmtime(), $goods_id))
  16. {
  17. clear_cache_files();
  18. make_json_result($selled_count);
  19. }
  20. }
复制代码
6、找到admin/includes/lib_goods.php,
找到:
  1. $sql = "sele ct goods_id, goods_name, goods_type, goods_sn,
  2. goods_thumb,shop_price, is_on_sale, is_best, is_new, is_hot, sort_order,
  3. goods_number, integral, " .
复制代码
替换为:
  1. $sql = "sele ct
  2. goods_id, goods_name, goods_type, goods_sn, goods_thumb,goods_basesell
  3. as selled_count,shop_price, is_on_sale, is_best, is_new, is_hot,
  4. sort_order, goods_number, integral, " .
复制代码
7、找到admin/template/goods_list.htm
找到:

  1. <th><a href="javascript:listTable.sort('sort_order');
  2. ">{$lang.sort_order}</a>{$sort_sort_order}</th>
复制代码
在其下面添加:
  1. <th><a href="javascript:listTable.sort('selled_count'); ">销量</a>{$sort_selled_count}</th>
复制代码
找到:

  1. <td align="center"><span onclick="listTable.edit(this,
  2. 'edit_sort_order',
  3. {$goods.goods_id})">{$goods.sort_order}</span></td>
复制代码
在其下面添加:

  1. <td align="right"><span onclick="listTable.edit(this,
  2. 'edit_selled_count',
  3. {$goods.goods_id})">{$goods.selled_count}</span></td>
复制代码
自定义销量方法:
selled_count($row['goods_id']);
使用此函数可以获取销量;

回答:


2L先自己留着,以后继续更新。1



顶!!!!!!!!!!

顶!!!!!!!!!!!!!!!

测试不通过,请老杨检查一下




贴上截图和报错

ib_common.php这段多了一个符号
后台修改销量报错
前台按销量排行显示空白




lib_common.php多了个;号,前台的需要对应你自身模板做出图片。后台报错这个可能是哪里添加错误吧,麻烦发一下错误代码

我图片有做,原来官方的没事,点按销量排,整个页面都是空白了。


后台修改销量没反应,显示这样。我的是2.7.1版本




需要2.7.3版本。另外朋友,能分享一下你的图片给大家不?是官方的模板那种按钮不?

能不能弄一个支持低版本的出来呢?
可以分享一下,我自己弄的



按照以上方法 出现问题点击评论 或者销量进入的时候报错误 一下是报错提示请老杨查查什么原因
MySQL server error report:Array ( [0] => Array ( [message] => MySQL Query Error ) [1] => Array ( [sql] => SELECT g.goods_id, g.goods_name, g.goods_name_style, g.market_price, g.is_new, g.is_best, g.is_hot, g.shop_price AS org_price, IFNULL(mp.user_price, g.shop_price * '1') AS shop_price, g.promote_price, g.goods_type, g.promote_start_date, g.promote_end_date, g.goods_brief, g.goods_thumb , g.goods_img FROM `root`.`ecs_goods` AS g LEFT JOIN `root`.`ecs_member_price` AS mp ON mp.goods_id = g.goods_id AND mp.user_rank = '0' WHERE g.is_on_sale = 1 AND g.is_alone_sale = 1 AND g.is_delete = 0 AND (g.cat_id IN ('3') OR g.goods_id IN ('16') ) ORDER BY selled DESC LIMIT 10 ) [2] => Array ( [error] => Unknown column 'selled' in 'order clause' ) [3] => Array ( [errno] => 1054 ) )

很不错,支持



求老杨解决

不错,不错,只是要修改好多