Перейти к содержанию

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

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

Поделиться сообщением


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

На форуме нашел модификатор, благодаря которому поиск ищет по категориям. Но есть свои минусы.
Если в поисковом запросе более одного слова, например "глушитель ауди", а категория называется "ауди", то категория не появится на странице поиска.
И вторая менее важная деталь. Когда перейти на страницу поиска по ссылке сайт.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 часа назад, MKaizer сказал:

На форуме нашел модификатор

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

 

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

LIKE '%" . $keyword . "%'

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
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,  не могли бы Вы мне подсказать что нужно дописать чтобы поиск начал работать так как мне нужно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В 24.09.2018 в 09:39, MKaizer сказал:

Если в поисковом запросе более одного слова, например "глушитель ауди", а категория называется "ауди", то категория не появится на странице поиска.

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
9 минут назад, nikifalex сказал:

 

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

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

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

Поделиться сообщением


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

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

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

×

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

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