Ecshop后台訂單列表增加”商品名”檢索字段


近期ecshop網站做活動,統計商品訂單量的時候沒有按商品名搜索的選項,只能手動查詢。這樣效率很低下,而且容易出錯。

現在為列表增加一個簡單的“按商品名搜索”表單項。效果如下圖

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">
4  {$lang.all_status}
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);

這樣,代碼上下文基本為

1 /**
2  * 搜索訂單
3  */
4  function searchOrder()
5  {
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;
11  listTable.loadList();
12  }

第三步,接收參數並處理

3.1)php文件接收參數並准備拼接sql

在/admin/order.php第4874行找到“$where = ‘WHERE 1 ‘;”,在下面增加

1 $join_goods =" ";
2  if ($filter['goods_name'])
3  {
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']) . "%'";
6  }

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.

1 /* 查詢 */
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第七行下面增加

1 <tr>
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>
4  </tr>

即可

這個過程中js自動獲取了表單的所有項目,而且之前我們已經完成了/admin/order.php中order_list()函數的改造


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM