Поиск по артикулу (SKU), модели в Opencart 1.5
Поиск по артикулу (SKU), модели в Opencart 1.5
В CMS Opencart, предусмотрен поиск по названиям товаров, что конечно удобно. Но иногда требуется искать продукцию по артикулу SKU или модели. В первоначальных настройках OpenCart нет такой возможности. Давайте усовершенствуем и добавим нужный нам поиск в возможности системы.
Как добавить поиск по SKU- артикулу и модели в Opencart 1.5 (проверено на версиях 1.5.0.5- 1.5.1.2)
Чтобы добавить поиск по модели и артикулу SKU в Opencart, нужно внести изменения в файл catalog/model/catalog/product.php
Красным и «-» отмечено то что нужно удалить, синим и «+» то, что нужно добавить
if (isset($data['filter_name']) && $data['filter_name']) {
+ $sFilterName = $this->db->escape(mb_strtolower($data['filter_name'], 'UTF-8'));
+ $sql_search_model_sku = 'LCASE(p.model) LIKE "%' . $sFilterName . '%" OR LCASE(p.sku) LIKE "%' . $sFilterName . '%"';if (isset($data['filter_description']) && $data['filter_description'])
- $sql .= " AND (LCASE(pd.name) LIKE '%" . $this->db->escape(mb_strtolower($data['filter_name'], 'UTF-8')) . "%' OR p.product_id IN (SELECT pt.product_id FROM" . DB_PREFIX . "product_tag pt WHERE pt.language_id = '" . (int)$this->config->get('config_language_id') . "' AND LCASE(pt.tag) LIKE '%" . $this->db->escape(mb_strtolower($data['filter_name'], 'UTF-8')) . "%') OR LCASE(pd.description) LIKE '%" . $this->db->escape(mb_strtolower($data['filter_name'], 'UTF-8')) . "%')";
+ $sql .= " AND (".$sql_search_model_sku." OR LCASE(pd.name) LIKE '%" . $sFilterName . "%' OR p.product_id IN (SELECT pt.product_id FROM " . DB_PREFIX . "product_tag pt WHERE pt.language_id = '" . (int)$this->config->get('config_language_id') . "' AND LCASE(pt.tag) LIKE '%" . $sFilterName . "%') OR LCASE(pd.description) LIKE '%" . $sFilterName . "%')";
} else {
- $sql .= " AND (LCASE(pd.name) LIKE '%" . $this->db->escape(mb_strtolower($data['filter_name'], 'UTF-8')) . "%' OR p.product_id IN (SELECT pt.product_id FROM " . DB_PREFIX . "product_tag pt WHERE pt.language_id = '" . (int)$this->config->get('config_language_id') . "' AND LCASE(pt.tag) LIKE '%" . $this->db->escape(mb_strtolower($data['filter_name'], 'UTF-8')) . "%'))";
+ $sql .= " AND (".$sql_search_model_sku." OR LCASE(pd.name) LIKE '%" . $sFilterName . "%' OR p.product_id IN (SELECT pt.product_id FROM " . DB_PREFIX . "product_tag pt WHERE pt.language_id = '" . (int)$this->config->get('config_language_id') . "' AND LCASE(pt.tag) LIKE '%" . $sFilterName . "%'))";
}
}
Поиск по артикулу SKU и модели для Opencart 1.5.1.3
$implode = array();
$words = explode(' ', $data['filter_name']);
foreach ($words as $word) {
- if (!empty($data['filter_description'])) {
- $implode[] = "LCASE(pd.name) LIKE '%" . $this->db->escape(utf8_strtolower($word)) . "%' OR LCASE(pd.description) LIKE '%" . $this->db->escape(utf8_strtolower($word)) ."%'";
- } else {
- $implode[] = "LCASE(pd.name) LIKE '%" . $this->db->escape(utf8_strtolower($word)) . "%'";
- }
+ if( !empty($word) )
+ {
+ $lword = $this->db->escape(utf8_strtolower(trim($word)));
+ // Add search by model and SKU
+ $implode[] = 'LCASE(p.model) LIKE "%' . $lword . '%" OR LCASE(p.sku) LIKE "%' . $lword . '%"';
+ if (!empty($data['filter_description'])) {
+ $implode[] = "LCASE(pd.name) LIKE '%" . $lword . "%' OR LCASE(pd.description) LIKE '%" . $lword . "%'";
+ } else {
+ $implode[] = "LCASE(pd.name) LIKE '%" . $lword . "%'";
+ }
+ }
}
if ($implode) {