Поиск по артикулу (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

Поиск по артикулу 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) {


Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

двадцать − четыре =