获取管理产品搜索以忽略Opencart中的特殊字符

时间:2018-08-29 08:38:08

标签: opencart

我有一个客户想要在管理区域中搜索产品,而忽略了产品名称中包含特殊字符这一事实。

例如,他们有很多产品上标有“ kings”一词或带有撇号的“ king’s”一词-两种语法都根据产品正确使用。

他们想要做的是在管理区域中搜索“国王”,所有出现“国王”和“国王”的产品都会出现-而不是默认情况下的“国王”。

他们对“ remy”和“ r.e.m.y”有相同的问题,在搜索“ remy”时,搜索需要忽略名称中存在“。”的事实。

Opencart版本2.3.0.2

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

看一下,如果您有经验,可以轻松做到,只需在Opencart中找到search query并将所有特殊符号替换为空字符串,请检查此示例,如果您的数据库表博客中有remy,标题列中的值'雷米,那么此查询将返回您的记录

SELECT * FROM `blog` WHERE title = replace(title,'.','') = 'remy'

例如查看图片:

示例用于点“。”仅,但您可以替换和其他特殊符号。

让我告诉您在哪里可以找到此查询:

  1. 首先,您可以看到链接为目录/产品,因此您的控制器为 在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),您可以使用自己的查询:)