近期ecshop网站做活动,统计商品订单量的时候没有按商品名搜索的选项,只能手动查询。这样效率很低下,而且容易出错。
现在为列表增加一个简单的“按商品名搜索”表单项。效果如下图

涉及到2个文件,分别是/admin/order.php,/admin/templates/order_list.htm,下面详说。
第一步,增加表单项
在/admin/templates/order_list.htm第11行下面增加
1 |
商品名<input name="goods_name" type="text" id="goods_name" size="15"> |
这样,代码上下文基本为
1 |
{$lang.order_sn}<input name="order_sn" type="text" id="order_sn" size="15"> |
2 |
{$lang.consignee|escape}<input name="consignee" type="text" id="consignee"size="15"> |
3 |
商品名<input name="goods_name" type="text" id="goods_name" size="15"> |
5 |
<select name="status" id="status"> |
第二步,js获取值
在/admin/order_list.htm第105行下面增加
1 |
listTable.filter['goods_name'] = Utils.trim(document.forms['searchForm'].elements['goods_name'].value); |
这样,代码上下文基本为
6 |
listTable.filter['order_sn'] = Utils.trim(document.forms['searchForm'].elements['order_sn'].value); |
7 |
listTable.filter['consignee'] = Utils.trim(document.forms['searchForm'].elements['consignee'].value); |
8 |
listTable.filter['goods_name'] = Utils.trim(document.forms['searchForm'].elements['goods_name'].value); |
9 |
listTable.filter['composite_status'] = document.forms['searchForm'].elements['status'].value; |
10 |
listTable.filter['page'] = 1; |
第三步,接收参数并处理
3.1)php文件接收参数并准备拼接sql
在/admin/order.php第4874行找到“$where = ‘WHERE 1 ‘;”,在下面增加
2 |
if ($filter['goods_name']) |
4 |
$join_goods = " LEFT JOIN " .$GLOBALS['ecs']->table('order_goods'). " AS og ON o.order_id=og.order_id LEFT JOIN " .$GLOBALS['ecs']->table('goods'). " AS g ON g.goods_id = og.goods_id "; |
5 |
$where .= " AND g.goods_name LIKE '%" . mysql_like_quote($filter['goods_name']) . "%'"; |
3.2)拼接sql
分别更改/admin/order.php第5025,5029,5041行sql语句为下面三句代码
1,
1 |
$sql = "SELECT COUNT(*) FROM " . $GLOBALS['ecs']->table('order_info') . " AS o ,". |
2 |
$GLOBALS['ecs']->table('users') . " AS u ". $join_goods. $where; |
2.
1 |
$sql = "SELECT COUNT(*) FROM " . $GLOBALS['ecs']->table('order_info') . " AS o ".$join_goods. $where; |
3.
2 |
$sql = "SELECT o.order_id, o.order_sn, o.add_time, o.order_status, o.shipping_status, o.order_amount, o.money_paid," . |
3 |
"o.pay_status, o.consignee, o.address, o.email, o.tel, o.extension_code, o.extension_id, " . |
4 |
"(" . order_amount_field('o.') . ") AS total_fee, " . |
5 |
"IFNULL(u.user_name, '" .$GLOBALS['_LANG']['anonymous']. "') AS buyer ". |
6 |
" FROM " . $GLOBALS['ecs']->table('order_info') . " AS o " . |
7 |
" LEFT JOIN " .$GLOBALS['ecs']->table('users'). " AS u ON u.user_id=o.user_id ".$join_goods. $where . |
8 |
" ORDER BY $filter[sort_by] $filter[sort_order] ". |
9 |
" LIMIT " . ($filter['page'] - 1) * $filter['page_size'] . ",$filter[page_size]"; |
完成,这样就可以了
有几点可以改进:表单名可以存到系统语言包;可以按照此方法在“订单查询”那个大表单里扩展更多动能,紧急情况就先这样…
为了搜索订单更精准,决定完成之前说的改进:在“订单查询”那个大表单里扩展”商品名”检索功能,相当简单:
在/admin/templates/order_query.htm第七行下面增加
2 |
<td><div align="right"><strong>商品名</strong></div></td> |
3 |
<td colspan="3"><input name="goods_name" type="text" id="goods_name" size="40"></td> |
即可
这个过程中js自动获取了表单的所有项目,而且之前我们已经完成了/admin/order.php中order_list()函数的改造
- ecshop 后台批量上传商品 完整上传
ecshop 后台批量上传商品,之所以无法上传,是因为后台上传php文件方法中没有导入商品原图路径 将ecshop根目录中的admin/goods_batch.php文件全部修改为 <?php ...
- ecshop 后台添加 成本价 利润
ecshop后台admin中的商品操作php文件,goods.php替换为下面的代码, 还要在数据库商品本店售价后门添加 cost 字段 为 商品成本价 ecs_goods表中添加 cost ...
- Ecshop 后台增加一个左侧列表菜单menu菜单的方法
Ecshop 后台增加一个左侧列表菜单menu菜单需要修改三个文件:/admin/includes/inc_menu.php/admin/includes/inc_priv.php/languages ...
- 修改ECSHOP后台的商品列表里显示该商品品牌
如何在在ECSHOP后台的商品列表中也显示商品的品牌”.下面就来最模板讲一下如何来修改.此方法只保证在ECSHOP2.7.2版本下有效,其他版本请参照修改. 第一步:首先我们来打开程序文件: /adm ...
- 在ECSHOP后台的订单列表中显示配送方式
熟悉ECSHOP后台的人都知道,只有点击某个具体的订单,进入订单详细页面才能看到该订单的配送方式,最模板修改的目的,是想让管理者在订单列表页面 就能看到该订单的配送方式. 下面是修改方法:首先来修改 ...
- 在Ecshop后台打印订单页面将商品按货号排序
ECSHOP后台管理里的“打印订单" 页面里的商品排序有点乱,现在想改成按序号来排序,修改方法如下 下面是在2.7.2基础上做的修改 打开 admin/order.php 文件 找到(大约 ...
- 给ecshop后台增加管理功能页面
给ecshop后台增加管理功能页面 比如我们增加一个统计报表叫做 物流费用统计报表 放在后台“报表统计”栏目中 具体操作步骤: 第一步,我们要添加一个菜单到后台,然后设置语言项,最后设置权限,这样,后 ...
- ecshop后台增加模块菜单详细教程(图)
我们有时候针对ecshop如此开发,想在后台加一些菜单,最模板以前提供过教程,但是并非很系统,今天最模板抛砖引玉图文教程告诉大家:如何在ecshop后台增加模块菜单! 首先需要修改四个文件:inc_p ...
- ecshop后台增加模块菜单详细教程
我们有时候针对ecshop如此开发,想在后台加一些菜单,最模板以前提供过教程,但是并非很系统,今天最模板抛砖引玉图文教程告诉大家:如何在ecshop后台增加模块菜单! 首先需要修改四个文件:inc_p ...
随机推荐
- python_中文乱码问题
1. 编码和解码的概念: 编码是将源对象内容按照一种标准转换为一种标准格式内容. 解码是和编码对应的,它使用和编码相同的标准将编码内容还原为最初的对象内容. 2. python中的编码和解 ...
- [转载]Oracle修改表空间大小
Oracle修改表空间大小 使用Oracle10g建立数据库后,向数据库中导入了部分数据,第二天继续向数据库中导入数据表时发生错误: 查了很多资料发现原来是Oracle表空间限制,导致无法继续导入数据 ...
- 修改文件中的内容,使用fileinput模块
import fileinput filename = 'passwd' ,backup='.bak') print line.replace('root','ROOT') a = ' this is ...
- JavaScript实现,判断一个点是否在多边形内
//定义点的结构体 function point(){ this.x=0; this.y=0; } //计算一个点是否在多边形里,参数:点,多边形数组 function PointInPoly(pt, ...
- Jquery判断离开页面时,通过Ajax更新数据(兼容IE,Chrome,FF浏览器)
现在很多项目都有客户离开网页时,处理一些业务的需求.所以焦点就聚集在了如何获取页面离开事件. 以下是本人在一个项目中需要记录页面浏览时长的处理办法,测试兼容IE,Chrome,FF浏览器 代码如下: ...
- scp noneed passwd
经常在不同linux机器之间互相scp拷文件,每次总是要输入密码才可行. 通过ssh-keygen生成公钥,在两台机器之间互相建立信任通道即可. 假设本地机器client,远程机器为server. 1 ...
- Azure billing 分析
昨天把西欧的2012的VM删掉,在北美新建一个2008的VM,装了sql2005 express 在C盘,这样存储就变成2个位置了,西欧和美国,然后放在那里不操作一天,发现billing多了很多, S ...
- IntelliJ IDEA 缓存和索引介绍和清理方法
IntelliJ IDEA 首次加载项目的时候,都会创建索引,而创建索引的时间跟项目的文件多少成正比,我也简单强调了 IntelliJ IDEA 索引的重要性.这里我们再对此进行详细说明索引.缓存对 ...
- 多语言本地化开发Localized
NSString * ViewsLocalizedStringFormat(NSString *key,NSString *defValue); // Handle localized strings ...
- Swift语言实战晋级-第9章 游戏实战-跑酷熊猫-5-6 踩踏平台是怎么炼成的
在游戏中,有很多分来飞去的平台,这个平台长短不一.如果每种长度都去创建一张图片那是比较繁琐的事情.实际上,我们只用到3张图.分别是平台的,平台的中间部分,平台的右边.关键是平台的中间部分,两张中间部分 ...