我有一个客户想要在管理区域中搜索产品,而忽略了产品名称中包含特殊字符这一事实。
例如,他们有很多产品上标有“ kings”一词或带有撇号的“ king’s”一词-两种语法都根据产品正确使用。
他们想要做的是在管理区域中搜索“国王”,所有出现“国王”和“国王”的产品都会出现-而不是默认情况下的“国王”。
他们对“ remy”和“ r.e.m.y”有相同的问题,在搜索“ remy”时,搜索需要忽略名称中存在“。”的事实。
Opencart版本2.3.0.2
非常感谢您的帮助!
答案 0 :(得分:0)
看一下,如果您有经验,可以轻松做到,只需在Opencart中找到search query
并将所有特殊符号替换为空字符串,请检查此示例,如果您的数据库表博客中有remy,标题列中的值'雷米,那么此查询将返回您的记录
SELECT * FROM `blog` WHERE title = replace(title,'.','') = 'remy'
例如查看图片:
示例用于点“。”仅,但您可以替换和其他特殊符号。
让我告诉您在哪里可以找到此查询:
首先,您可以看到链接为目录/产品,因此您的控制器为
在admin/catalog/product
中,当您在“标题”输入中键入内容时,它将GET参数&filter_name
发送到此控制器。您可以检查该过滤器的控制器,请参阅:
protected function getList() {
if (isset($this->request->get['filter_name'])) {
$filter_name = $this->request->get['filter_name'];
} else {
$filter_name = null;
}
在此处检查此GET参数并将其设置为变量$filter_name
,然后将将此变量发送给模型的代码如下:
$filter_data = array(
'filter_name' => $filter_name,
'filter_model' => $filter_model,
'filter_price' => $filter_price,
'filter_quantity' => $filter_quantity,
'filter_status' => $filter_status,
'filter_image' => $filter_image,
'sort' => $sort,
'order' => $order,
'start' => ($page - 1) * $this->config->get('config_limit_admin'),
'limit' => $this->config->get('config_limit_admin')
);
$product_total = $this->model_catalog_product->getTotalProducts($filter_data);
它使用变量设置数组,然后调用$this->model->catalog->product->getTotalProducts
,因此需要查询:
public function getTotalProducts($data = array()) {
$sql = "SELECT COUNT(DISTINCT p.product_id) AS total FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id)";
$sql .= " WHERE pd.language_id = '" . (int)$this->config->get('config_language_id') . "'";
if (!empty($data['filter_name'])) {
$sql .= " AND pd.name LIKE '" . $this->db->escape($data['filter_name']) . "%'";
}
if (!empty($data['filter_model'])) {
$sql .= " AND p.model LIKE '" . $this->db->escape($data['filter_model']) . "%'";
}
if (isset($data['filter_price']) && !is_null($data['filter_price'])) {
$sql .= " AND p.price LIKE '" . $this->db->escape($data['filter_price']) . "%'";
}
if (isset($data['filter_quantity']) && !is_null($data['filter_quantity'])) {
$sql .= " AND p.quantity = '" . (int)$data['filter_quantity'] . "'";
}
if (isset($data['filter_status']) && !is_null($data['filter_status'])) {
$sql .= " AND p.status = '" . (int)$data['filter_status'] . "'";
}
if (isset($data['filter_image']) && !is_null($data['filter_image'])) {
if ($data['filter_image'] == 1) {
$sql .= " AND (p.image IS NOT NULL AND p.image <> '' AND p.image <> 'no_image.png')";
} else {
$sql .= " AND (p.image IS NULL OR p.image = '' OR p.image = 'no_image.png')";
}
}
$query = $this->db->query($sql);
return $query->row['total'];
}
如果您对Opencart不熟悉,那将不是那么容易,但是有可能。
一个提示:如果设置了此参数(if-else),您可以使用自己的查询:)