Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...

Поиск по категориям


MKaizer
 Поделиться

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

Добрый вечер. Как можно реализовать поиск по категориям при условии, что когда пользователь в поиске пишет запрос состоящий из двух или более слов, одно из которых название категории, и тогда на странице поиска кроме товара будет выведена данная категория?

Ссылка на комментарий
Поделиться на других сайтах


На форуме нашел модификатор, благодаря которому поиск ищет по категориям. Но есть свои минусы.
Если в поисковом запросе более одного слова, например "глушитель ауди", а категория называется "ауди", то категория не появится на странице поиска.
И вторая менее важная деталь. Когда перейти на страницу поиска по ссылке сайт.com/search, то появляется ошибка Invalid argument supplied for foreach ().

Ну и сам модификатор:

 

<file path="catalog/model/catalog/category.php">
		<operation>
			<search><![CDATA[public function getTotalCategoriesByCategoryId($parent_id = 0) {]]></search>
			<add position="before"><![CDATA[
              public function getSearchCategories($keyword) {
                $query = $this->db->query("SELECT c.category_id, c.image, cd.name 
                FROM " . DB_PREFIX . "category c 
                LEFT JOIN " . DB_PREFIX . "category_description cd ON (c.category_id = cd.category_id) 
                WHERE cd.name LIKE '%" . $keyword . "%' 
                AND cd.language_id = '" . (int)$this->config->get('config_language_id') . "' 
                AND c.status = '1'");
                return $query->rows;
              }
             ]]>
			</add>
		</operation>
	</file>
  
  <file path="catalog/controller/product/search.php">
		<operation>
			<search><![CDATA['href'        => $this->url->link('product/product', 'product_id=' . $result['product_id'] . $url)]]></search>
			<add position="after" offset="2"><![CDATA[
        $data['search_categories'] = array();
				$search_cats = $this->model_catalog_category->getSearchCategories($search);    
					foreach($search_cats as $category) {
						if($category['image']) {
							$image = $this->model_tool_image->resize($category['image'], $this->config->get($this->config->get('config_theme') . '_image_category_width'), $this->config->get($this->config->get('config_theme') . '_image_category_height'));
						} else {
							$image = $this->model_tool_image->resize('placeholder.png', $this->config->get($this->config->get('config_theme') . '_image_category_width'), $this->config->get($this->config->get('config_theme') . '_image_category_height'));
						}
					$data['search_categories'][] = array(
						'thumb' => $image,
						'name' => $category['name'],
						'href' => $this->url->link('product/category', 'path=' . $category['category_id'])
					);
				}
			]]></add>
		</operation>
	</file>
  
  <file path="catalog/view/theme/*/template/product/search.tpl">
		<operation>
			<search><![CDATA[<h1><?php echo $heading_title; ?></h1>]]></search>
			<add position="after"><![CDATA[
				<div class="row">
					<?php foreach($search_categories as $category) { ?>
						<div class="search_categories col-lg-3 col-md-3 col-sm-6 col-xs-12">
							<a href="<?php echo $category['href']; ?>">
								<?php if($category['thumb']) { ?><img src="<?php echo $category['thumb']; ?>" alt="" title="" class="img-responsive" /><?php } ?>
								<p><?php echo $category['name']; ?></p>
							</a>
						</div>
					<?php } ?>
				</div>
			]]></add>
		</operation>
	</file>

 

Ссылка на комментарий
Поделиться на других сайтах


2 часа назад, nikifalex сказал:

это наверное был форум хакеров, где обсуждали как можно взломать сайт через sql injection вида

Почему, здесь нашел

http://opencartforum.com/topic/92181-vyvesti-kategorii-na-stranice-poiska/

 

если с этим кодом можно взломать сайт то пожалуйста подскажите как его исправить чтобы не было никаких проблем

Изменено пользователем MKaizer
Ссылка на комментарий
Поделиться на других сайтах


42 минуты назад, MKaizer сказал:

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

 

@nikifalex уже написал

замените $keyword

на $this->db->escape($keyword)

Ссылка на комментарий
Поделиться на других сайтах

8 часов назад, AlexDW сказал:

замените $keyword

на $this->db->escape($keyword)

Спасибо за подсказку и совет. Исправил.

Ссылка на комментарий
Поделиться на других сайтах


12 часов назад, nikifalex сказал:

И напишите $this->db->escape($keyword) возможно легче станет

Спасибо, исправил.

 

12 часов назад, nikifalex сказал:

ну и ответ на вопрос, почему не ищет когда есть пробел, тожке в этой же строке.

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

Ссылка на комментарий
Поделиться на других сайтах


@nikifalex,  не могли бы Вы мне подсказать что нужно дописать чтобы поиск начал работать так как мне нужно?

Ссылка на комментарий
Поделиться на других сайтах


9 минут назад, nikifalex сказал:

 

ну а что вы хотели?

Вам нужен более интеллектуальный поискВозьмите другой модуль

Понял, спасибо.

Ссылка на комментарий
Поделиться на других сайтах


Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
 Поделиться

  • Сейчас на странице   0 пользователей

    • Нет пользователей, просматривающих эту страницу.
×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.