Приветствую друзья! Сегодня я хочу поделиться решением которое позволит выполнять поиск не только по товарам а и по категориям.

Зачем это нужно

Во-первых, идет более понятная выдача, многие покупатели просто не хотят искать в категориях ту что надо, особенно если их много. Они просто вбивают в поиск название того что ищут. Например, это может быть запрос Велосипед или Мотоцикл.

Во-вторых, в магазинах часто идет название категории а в ней идут модели товаров, часто без названия что это именно. Тот же пример на велосипедах. Есть категория Велосипеды в ней идут товары в названия которых есть только бренд и модель. В таком случае в стандартном поиске ничего не будет найдено из-за того что нет вхождений поискового запроса в названии товара.

Совсем другое дело когда мы добавим поиск по категориям, и тогда при поиске у нас будет выведена категория Велосипеды, перейдя в которую покупатель найдет то, что он искал.

Как это сделать

Для начала нам надо в модель добавить метод выборки категорий по исковому запросу. Для этого открываем файл catalog/model/catalog/category.php и добавляем эту функцию:

 public function getCategoriesLive($search) {
$category_data = array();
$sql = 'SELECT * FROM ' . DB_PREFIX . 'category c
LEFT JOIN ' . DB_PREFIX . 'category_description cd ON (c.category_id = cd.category_id)
LEFT JOIN ' . DB_PREFIX . 'category_to_store c2s ON (c.category_id = c2s.category_id) WHERE
cd.name LIKE '%' . $search . '%' 
AND cd.language_id = '' . (int)$this->config->get('config_language_id') . ''
AND c2s.store_id = '' . (int)$this->config->get('config_store_id') . ''
AND c.status = '1' ORDER BY c.sort_order, LCASE(cd.name)';
$query = $this->db->query($sql);
foreach ($query->rows as $result) {
$category_data[$result['category_id']] = $this->getCategory($result['category_id']);
}
return $category_data;
}













После этого надо перейти в контроллер и добавить код для формирования массива найденных категорий. Открываем файл catalog/controller/product/search.php и перед строкой

$data['products'] = array();

Добавить строки:

 $data['cats'] = array();
$categories = $this->model_catalog_category->getCategoriesLive($search);
foreach($categories as $category){
$data['cats'][] = array(
'product_id' => $category['category_id'],
'name' => html_entity_decode($category['name'], ENT_QUOTES, 'UTF-8'),
'url'        => $this->url->link('product/category', 'path=' . $category['category_id'])
);
}







После чего переходим в шаблон и добавим вывод найденных категорий. Для этого открываем файл catalog/view/theme/ТЕМА/template/product/search.tpl где в нужном месте добавляем вывод категорий строками:

      
       

Найденные категории


       

             
               
  • '>

  •          
           

     






Этим кодом мы заставляем поиск искать и по категориям. На этом конечно не ограничивается, это как заготовка, которую можно расширять по своему усмотрению. Понятно, по аналогии можно можно сделать и в быстром поиске, да и везде где есть поиск.


30.11.2017 8036
Новости из этой категории
11.09.2019 4943
В Opencart при копировании товара удаляет
Во втором Opencart замечен странный баг который вместо копирования товара в списке его удаляет. Что бы исправить необходимо открыть файлadmin/view/template/catalog/produc..
15.11.2018 17282
Как вывести любую информацию в любом месте в карточке товара
Приветствую тебя юный разработчик! Очень часто в заданиях или целых проектах у меня бывают похожие пункты. Очень популярный это вывод информационного блока в карточке тов..
29.09.2018 8078
Исправляем баг Opencart редирект с page=1 на страницу категории
В пагинации Opencart зарыто очень много багов. Например при перелистывании категории кнопками 1.2.3... у нас создаются дубли страниц, которые можно решить с помощью внедр..
11.02.2018 7879
Как задать разный порядок сортировки товара для каждой из категорий к которому он привязан
Приветствую! Недавно мне написал заказчик который попросил меня сделать достаточно интересную доработку. Суть ее в том что надо сделать порядок сортировки товара который ..
23.01.2018 9784
Пропадают заказы в Opencart - как вылечить?
Очень часто ко мне обращаются мои клиенты с просьбой разобраться почему у них пропадают заказы. То есть клиенты звонят и говорят что заказ сделали но никто не перезванива..
Вся информация, представленная на сайте, является демонстрационной и оставляя информацию о своих персональных данных, вы добровольно делаете их общедоступными.
Рекомендуем использовать обезличенные данные. Мы используем файлы cookie для вашего удобства пользования сайтом и повышения качества рекомендаций. Подробнее