OC3.0.2.0后台产品列表添加SKU显示及筛选功能求助
在OpenCart 3.0.2.0后台产品列表显示SKU并添加筛选功能
嘿,我刚好折腾过OC3.0.2.0的这个需求,给你一步步拆解具体操作,记得改文件前先备份,避免出错:
一、在产品列表中显示SKU编号
需要修改控制器、视图和语言文件三个地方:
1. 修改控制器文件(获取SKU数据)
打开 admin/controller/catalog/product.php,找到index()方法里获取产品列表的查询部分:
- 在
$query = $this->db->query("SELECT ...")的SELECT字段中,添加p.sku,比如把原字段p.product_id, p.name, p.model改成p.product_id, p.name, p.model, p.sku; - 接着在循环赋值
$products[] = array(的数组里,添加一行:'sku' => $result['sku'],
2. 修改视图文件(渲染SKU列)
打开 admin/view/template/catalog/product_list.twig:
- 在表头区域(
<thead>内),找到<th>{{ column_model }}</th>,在它后面添加一行:<th>{{ column_sku }}</th>; - 在表格内容区域(
<tbody>内的<tr>里),找到<td>{{ product.model }}</td>,在它后面添加一行:<td>{{ product.sku }}</td>
3. 添加语言翻译(表头显示中文)
打开 admin/language/zh-cn/catalog/product.php,在类似$_['column_model'] = '型号';的位置,添加一行:
$_['column_sku'] = 'SKU编号';
二、实现按SKU编号筛选产品的功能
同样需要修改控制器、视图和语言文件:
1. 修改控制器与模型文件(添加筛选逻辑)
- 回到
admin/controller/catalog/product.php的index()方法,在获取筛选参数的部分添加:if (isset($this->request->get['filter_sku'])) { $filter_sku = $this->request->get['filter_sku']; } else { $filter_sku = ''; } - 把
$filter_sku传入产品模型的参数数组,在$data['products'] = $this->model_catalog_product->getProducts($data);之前的$data里添加:'filter_sku' => $filter_sku, - 打开
admin/model/catalog/product.php的getProducts()方法,在WHERE p.status = '1'之后添加SKU筛选条件:if (!empty($data['filter_sku'])) { $sql .= " AND p.sku LIKE '%" . $this->db->escape($data['filter_sku']) . "%'"; } - 最后在分页URL拼接部分,带上SKU筛选参数,比如在
'url' => $this->url->link('catalog/product', 'token=' . $this->session->data['token'] . '&filter_name=' . urlencode($filter_name) . ...里,加上&filter_sku=' . urlencode($filter_sku)
2. 修改视图文件(添加SKU筛选输入框)
打开 admin/view/template/catalog/product_list.twig,在筛选表单区域找到名称为filter_name的输入框组,在它后面添加:
<div class="form-group"> <label class="col-sm-2 control-label" for="input-sku">{{ entry_sku }}</label> <div class="col-sm-10"> <input type="text" name="filter_sku" value="{{ filter_sku }}" placeholder="{{ entry_sku }}" id="input-sku" class="form-control" /> </div> </div>
3. 添加筛选框的语言翻译
打开 admin/language/zh-cn/catalog/product.php,添加一行:
$_['entry_sku'] = 'SKU编号';
最后提醒
如果不想修改核心文件(避免后续升级被覆盖),可以把这些修改做成OCmod或者vQmod的扩展包,这样更安全。
内容的提问来源于stack exchange,提问作者Navid
相关产品推荐
相关产品推荐

