Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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


Recommended Posts

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

Надіслати
Поділитися на інших сайтах


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

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.