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

[Модуль] Фильтр товаров в категории 2.0 / 3.0


Recommended Posts

Возможность есть. Скоро напишу как выводить опции и значения для категории и для отдельного товара.

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

Очень хотелось бы увидеть возможность указания нескольких значений одной характеристики (например, товар может быть как мужским, так и женским).

Тоже нужна была такая возможность.

Сделал так:

в файле admin\model\catalog\product.php строки:

// Start filter
		$this->db->query("DELETE FROM " . DB_PREFIX . "product_to_value WHERE product_id = '" . (int)$product_id . "'");

		if (isset($data['product_to_value_id'])) {
			foreach ($data['product_to_value_id'] as $option_id => $value_id) {
				$this->db->query("INSERT INTO " . DB_PREFIX . "product_to_value SET product_id = '" . (int)$product_id . "', option_id = '" . (int)$option_id . "', value_id = '" . (int)$value_id . "'");
			}
		}
		// End filter

изменил на:

// Start filter
		$this->db->query("DELETE FROM " . DB_PREFIX . "product_to_value WHERE product_id = '" . (int)$product_id . "'");

		if (isset($data['product_to_value_id'])) {
			foreach ($data['product_to_value_id'] as $option_id => $value_arr) {
				foreach($value_arr as $value_id) {
					$this->db->query("INSERT INTO " . DB_PREFIX . "product_to_value SET product_id = '" . (int)$product_id . "', option_id = '" . (int)$option_id . "', value_id = '" . (int)$value_id . "'");
				}
			}
		}
		// End filter

в файле admin\controller\catalog\filter.php строку:

$html .= '<select name="product_to_value_id[' . $option['option_id'] . ']">';

изменил на:

$html .= '<select multiple name="product_to_value_id[' . $option['option_id'] . '][]">';
  • +1 1
Надіслати
Поділитися на інших сайтах


Еще вопрос возник...

При просмотре отфильтрованных товаров, нет возможности изменить сортировку. Он пересортировывает все товары, без учета фильтров. Или это я что-то не так сделал??

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


LiS, я учел это и по умолчанию все сортирует. Покажите ваш магазин.
Надіслати
Поділитися на інших сайтах

LiS, сравните код с вашим в category.php

if (isset($this->request->get['filter'])) {
  $url .= '&filter=' . $this->request->get['filter'];
}

$this->data['sorts'] = array();

И стоит ли переменная $url во всех элементах массива sorts?

Должно быть так:

if (isset($this->request->get['filter'])) {

$url .= '&filter=' . $this->request->get['filter'];

}

$this->data['sorts'] = array();

$this->data['sorts'][] = array('text' => $this->language->get('text_name_asc'), 'value' => 'pd.name-ASC', 'href' => $this->model_tool_seo_url->rewrite($this->url->http('product/category&path=' . $this->request->get['path'] . '&sort=pd.name&order=ASC' . $url)));

$this->data['sorts'][] = array('text' => $this->language->get('text_name_desc'), 'value' => 'pd.name-DESC', 'href' => $this->model_tool_seo_url->rewrite($this->url->http('product/category&path=' . $this->request->get['path'] . '&sort=pd.name&order=DESC' . $url)));

$this->data['sorts'][] = array('text' => $this->language->get('text_price_asc'), 'value' => 'p.price-ASC', 'href' => $this->model_tool_seo_url->rewrite($this->url->http('product/category&path=' . $this->request->get['path'] . '&sort=p.price&order=ASC' . $url)));

$this->data['sorts'][] = array('text' => $this->language->get('text_price_desc'), 'value' => 'p.price-DESC', 'href' => $this->model_tool_seo_url->rewrite($this->url->http('product/category&path=' . $this->request->get['path'] . '&sort=p.price&order=DESC' . $url)));

$this->data['sorts'][] = array('text' => $this->language->get('text_rating_desc'), 'value' => 'rating-DESC', 'href' => $this->model_tool_seo_url->rewrite($this->url->http('product/category&path=' . $this->request->get['path'] . '&sort=rating&order=DESC' . $url)));

$this->data['sorts'][] = array('text' => $this->language->get('text_rating_asc'), 'value' => 'rating-ASC', 'href' => $this->model_tool_seo_url->rewrite($this->url->http('product/category&path=' . $this->request->get['path'] . '&sort=rating&order=ASC' . $url)));

Внимание, состав элементов массива sorts в вашей версии OpenCart может отличаться! Так что не копируйте данный код, а просто исправьте при необходимости свой.

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

Возможность есть. Скоро напишу как выводить опции и значения для категории и для отдельного товара.

А зачем всё это писать? Ведь в версии ocStore 1.0 (основанной на OpenCart 1.5) это уже будет встроено в движок?

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


А зачем всё это писать? Ведь в версии ocStore 1.0 (основанной на OpenCart 1.5) это уже будет встроено в движок?

Вопрос в том, чтобы не заполнять отдельно список характеристик товара и отдельно настраивать фильтр, а использовать параметры одного для заполнения другого

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


Благодарю. Разобрался с ошибкой.

У меня условие

if (isset($this->request->get['filter'])) {
$url .= '&filter=' . $this->request->get['filter'];
 }

было после использования сортировки, и поэтому переменная $url получалась всегда пустой

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


Поставил модуль на localhost, перехожу в админке Каталог>Фильтр товара и получаю сообщение

-Доступ запрещен!

-У Вас нет прав для доступа к этой странице. Если она Вам нужна, обратитесь к администратору.

Что у меня не так, почему не работает?

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


Boob, система -> пользователи -> группы пользователей -> Главный администратор [Изменить], ставим галки напротив catalog/filter и сохраняем
Надіслати
Поділитися на інших сайтах

Boob, система -> пользователи -> группы пользователей -> Главный администратор [Изменить], ставим галки напротив catalog/filter и сохраняем

Заработало.

Огромное спасибо!

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


simulacrum, может не присвоены значения к товарам?
Надіслати
Поділитися на інших сайтах

Дефолтовая база - только что поставил.

Например, в iPod Classic есть option - Memory и два значения 1GB и 8GB

прописал Memory и 1GB, 8GB в Products filter.

Понимаю, мож что упустил из виду. Но не могу вьехать

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


А в редакте товара во вкладке "Опции фильтра" вы указали эти значения?

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

Точно. Есть такой раздел. Я не обратил на него внимания. Спасибо. Отличная работа. Я было начал свой вариант пробовать. Но не успеваю - надо уже заканчивать.

Возможно, ваш вариант даже более разумен, чем дефолтовый. Я имею ввиду иерахрхию опций. С точки зрения продавца каждый товар уникален, Нельзя продать красные по цене синих и тд... У них должен быть разный товарный код, иначе будет пересортица. У Опенкарт в этом плане явное упущение с их дурацкой системой сложения и вычитания. Зачем то приходится три раза указывать количество товара, что неразумно.

У вас же получается, надо каждый товар отдельно прописать. Хотя еще посмотрю, может и здесь найдется какой подводный камень. Но мне нравится!

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


было бы здорово, если сортировать можно не только в конкретных категориях, но и по всем категориям. Так если это размер обуви, то можно было отсортировать всю обувь по этому признаку. или я снова еще не вьехал?

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


А ну вот теперь понял, что не устраивает.

Например, при выборе товара в opencart есть возможность выбрать товар по определенному признаку - цвету, размеру и тд. то есть "опциям". Они указываются в "Available Options"

Фильтр не дает такую возможность. Так что придется искать другие пути.

Жаль!

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


simulacrum, вы про калькуляцию цены при особых параметрах?
Надіслати
Поділитися на інших сайтах

simulacrum, вы про калькуляцию цены при особых параметрах?

Ну такой пример

Обувь или Одежда. Могут различаться цветом и размером. Кому-то надо найти товары нужного размера. Задает размер и получает список.

И, например, клиент открывает конкретную модель, скажем, "Модель 5", и уже потом /как это сделано по дефолту/, выбирает по размеру /а в вашем случае для одной модели можно указать только один размер/.

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


  • 2 weeks later...

Я сейчас пишу таблицу свойств товара, основанную на параметрах фильтра... У меня получается так:

model/catalog/product.php

public function getFilterValue($product_id, $feeld) {
		$query = $this->db->query("SELECT ".$feeld." FROM " . DB_PREFIX . "product_to_value where product_id='".(int)$product_id. "'");
		$i=0;
		while($row = mysql_fetch_array($query))
		{
			$arr[$i]=$row[$feeld];
			$i++;
		}
		return $arr;
	}

public function getFilterCategoryDescription($option_id) {
		$query = $this->db->query("SELECT name FROM " . DB_PREFIX . "category_option_description WHERE option_id='".(int)$option_id. "'");
		$opt_row=mysql_fetch_array($query);
		$opt=$opt_row['name'];
		return $opt;
	}
	
public function getFilterValueDescription($value_id) {
		$query = $this->db->query("SELECT name FROM " . DB_PREFIX . "category_option_description WHERE option_id='".(int)$value_id. "'");
		$val_row=mysql_fetch_array($query);
		$val=$val_row['name'];
		return $val;
	}

controller/product/product.php

$FilterCategory=$this->model_catalog_product->getFilterValue($product_id, 'option_id');
				$FilterValue=$this->model_catalog_product->getFilterValue($product_id, 'value_id');
				$i=0;
				foreach($FilterOptions as $FilterOptions)
				{
					$FilterCategoryDescription[$i]=$this->model_catalog_product->getFilterCategoryDescription($FilterCategory[$i]);
					$FilterValueDescription[$i]=$this->model_catalog_product->getFilterValueDescription($FilterValue[$i]);
					$i++;
				}

product.tpl

<div>
				<table border="1">
			  <?php
				$i=0;
				foreach ($FilterCategoryDescription as $FilterCategoryDescription)
				{
				echo '<tr><td>  '.$FilterCategoryDescription[$i].'</td><td>  '.$FilterValueDescription[$i].'</td></tr>' ;
				$i++;
				}
				?>
				</table>
			  </div>

Но я не знаю как передать массив в шаблон... С php опыт небольшой. Подскажите как это сделать.

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


LiS, )) что вы хотите сделать? Выводить опции для товара?
Надіслати
Поділитися на інших сайтах

LiS, )) что вы хотите сделать? Выводить опции для товара?

Мне нужна таблица вида:

Категория фильтра - Его значение для данного товара.

Вроде этот код работает и нужные мне данные хранятся в массивах $FilterCategoryDescription[$i] $FilterValueDescription[$i], но возникли проблемы с отображением их на самой странице...

P.S. Внес изменения в код

foreach($FilterOptions as $FilterOptions)
				{
					$this->data['FilterCategoryDescription'][$i]=$this->model_catalog_product->getFilterCategoryDescription($FilterCategory[$i]);
					$this->data['FilterValueDescription'][$i]=$this->model_catalog_product->getFilterValueDescription($FilterValue[$i]);
					$i++;
				}
Как я понимаю так правильнее, однако проблема остается
Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

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

×
×
  • Створити...

Important Information

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