Перейти к содержанию
  • В связи с блокировкой банка QIWI оплата через сайт не возможна.
    Для оплаты и получения дополнений просьба писать в личные сообщения
    Admin*у
    После оплаты Вам так же будет доступно скачивание дополнений и обновлений на данном форуме

Как сделать поиск не только по товарам а и по категориям


Рекомендуемые сообщения

extended-search.png.f580a27f979815a82d7bfaff3ece1dd5.png

Дорабатываем поиск что бы искал не только товары, но и категории

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

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

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

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

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

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

Для начала нам надо в модель добавить метод выборки категорий по исковому запросу. Для этого открываем файл 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 где в нужном месте добавляем вывод категорий строками:

<?php if ($cats) { ?>
        <h2>Найденные категории</h2>
        <ul>
          <?php foreach($cats as $cat) { ?>
            <li><a href="<?php echo $cat['url']; ?>"><?php echo $cat['name']; ?></a></li>
          <?php } ?>
        </ul>
      <?php } ?>

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

Ссылка на комментарий

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...