[Решено] Настройка поиска opencart

Тема в разделе "OpenCart", создана пользователем yngvar, 21 дек 2015.

Метки:
Статус темы:
Закрыта.
  1. yngvar

    yngvar

    Регистрация:
    21 дек 2015
    Сообщения:
    10
    Симпатии:
    0
    Всем привет! Есть opencart 2.1.0.1. Поиск по артикулу (не в админке) работает только по строгому соответствию, а нужно, чтобы по совпадающим словам. Кто сталкивался? Заранее спасибо.
     
  2. chukcha

    chukcha

    Регистрация:
    9 окт 2014
    Сообщения:
    448
    Симпатии:
    119
    в модели products
    PHP:
                if (!empty($data['filter_name'])) {
                    
    $sql .= " OR LCASE(p.model) = '" $this->db->escape(utf8_strtolower($data['filter_name'])) . "'";
                    
    $sql .= " OR LCASE(p.sku) = '" $this->db->escape(utf8_strtolower($data['filter_name'])) . "'";
                    
    $sql .= " OR LCASE(p.upc) = '" $this->db->escape(utf8_strtolower($data['filter_name'])) . "'";
                    
    $sql .= " OR LCASE(p.ean) = '" $this->db->escape(utf8_strtolower($data['filter_name'])) . "'";
                    
    $sql .= " OR LCASE(p.jan) = '" $this->db->escape(utf8_strtolower($data['filter_name'])) . "'";
                    
    $sql .= " OR LCASE(p.isbn) = '" $this->db->escape(utf8_strtolower($data['filter_name'])) . "'";
                    
    $sql .= " OR LCASE(p.mpn) = '" $this->db->escape(utf8_strtolower($data['filter_name'])) . "'";
                }
    заменить
    PHP:
                if (!empty($data['filter_name'])) {
                    
    $sql .= " OR LCASE(p.model) = '%" $this->db->escape(utf8_strtolower($data['filter_name'])) . "%'";
                    
    $sql .= " OR LCASE(p.sku) =  '%" $this->db->escape(utf8_strtolower($data['filter_name'])) . "%'";
                    
    $sql .= " OR LCASE(p.upc) =  '%" $this->db->escape(utf8_strtolower($data['filter_name'])) . "%'";
                    
    $sql .= " OR LCASE(p.ean) =  '%" $this->db->escape(utf8_strtolower($data['filter_name'])) . "%'";
                    
    $sql .= " OR LCASE(p.jan) =  '%" $this->db->escape(utf8_strtolower($data['filter_name'])) . "%'";
                    
    $sql .= " OR LCASE(p.isbn) = '%" $this->db->escape(utf8_strtolower($data['filter_name'])) . "%'";
                    
    $sql .= " OR LCASE(p.mpn) =  '%" $this->db->escape(utf8_strtolower($data['filter_name'])) . "%'";
                }
     
  3. yngvar

    yngvar

    Регистрация:
    21 дек 2015
    Сообщения:
    10
    Симпатии:
    0
    Спасибо! Вроде, всё сделал, как показано, но не работает. А нужно вместо = ставить LIKE.
    PHP:
    if (!empty($data['filter_name'])) {
                    
    $sql .= " OR LCASE(p.model) LIKE '%" $this->db->escape(utf8_strtolower($data['filter_name'])) . "%'";
                    
    $sql .= " OR LCASE(p.sku) LIKE '%" $this->db->escape(utf8_strtolower($data['filter_name'])) . "%'";
                    
    $sql .= " OR LCASE(p.upc) LIKE '%" $this->db->escape(utf8_strtolower($data['filter_name'])) . "%'";
                    
    $sql .= " OR LCASE(p.ean) LIKE '%" $this->db->escape(utf8_strtolower($data['filter_name'])) . "%'";
                    
    $sql .= " OR LCASE(p.jan) LIKE '%" $this->db->escape(utf8_strtolower($data['filter_name'])) . "%'";
                    
    $sql .= " OR LCASE(p.isbn) LIKE '%" $this->db->escape(utf8_strtolower($data['filter_name'])) . "%'";
                    
    $sql .= " OR LCASE(p.mpn) LIKE '%" $this->db->escape(utf8_strtolower($data['filter_name'])) . "%'";
                }
     
    Последнее редактирование: 22 дек 2015
  4. chukcha

    chukcha

    Регистрация:
    9 окт 2014
    Сообщения:
    448
    Симпатии:
    119
    Ну да, извините - писал с листа.
     
Статус темы:
Закрыта.