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

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


Recommended Posts

Если нужно выводить для конкретного товара его х-стики фильтра вида:

название опции - значение

название опции - значение

...

то:

catalog\controller\product\product.php

$this->data['filter_options'] = $this->model_catalog_filter->getOptionsByProductId($this->request->get['product_id']);

catalog\view\theme\default\template\product\product.tpl

<?php foreach ($filter_options as $option) { ?>
                  <span>
                    <b><?php echo $option['name']; ?></b><?php echo $option['value_name']; ?><?php echo (next($filter_options) ? '<em> / </em>' : ''); ?>
                  </span>
<?php } ?>

catalog\model\catalog\filter.php

public function getOptionsByProductId($product_id) {

    $option_data = array();

    $option_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "category_option co LEFT JOIN " . DB_PREFIX . "product_to_value p2v ON (co.option_id = p2v.option_id) LEFT JOIN " . DB_PREFIX . "category_option_description cod ON (co.option_id = cod.option_id) WHERE p2v.product_id = '" . (int)$product_id . "' AND cod.language_id = '" . (int)$this->config->get('config_language_id') . "' AND co.status = '1' ORDER BY co.sort_order");

    foreach ($option_query->rows as $option) {
      
      $value_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "category_option_value cov LEFT JOIN " . DB_PREFIX . "category_option_value_description covd ON (cov.value_id = covd.value_id) LEFT JOIN " . DB_PREFIX . "product_to_value p2v ON (cov.value_id = p2v.value_id) WHERE p2v.product_id = '" . (int)$product_id . "' AND cov.option_id = '" . (int)$option['option_id'] . "' AND covd.language_id = '" . (int)$this->config->get('config_language_id') . "'");

      $option_data[] = array(
        'option_id' => $option['option_id'],
        'name' => $option['name'],
        'value_name' => $value_query->row['name']
      );
    }
    return $option_data;
  }
Надіслати
Поділитися на інших сайтах

Уважаемое сообщество – а для чего Вы вообще мучаетесь над этим, ведь в осСторе 1.0 (здесь все таки не 2.0 должна была быть, а 0.2.0) – это уже будет встроенный функционал?

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


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

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

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


Спасибо огромное SooR! Отличная работа.

Сделал все по инструкции, работает.

Возникло пару вопросов.

1) Например у меня есть 50 товаров, которые попадают под некий фильтр - "N", я проглядел где-то, или же каждому товару нужно отдельно выставлять "Опции фильтра"?

2) Не работают кнопки - "Удалить,Включено,Выключено" в - "Каталог->Товары", при нажатии Not Found The requested document was not found on this server.

Предварительно вписывал в product.php

$this->data['button_enable'] = 'Включено';
$this->data['button_disable'] = 'Выключено';

Спасибо

Использую ocStore v0.2.0 (OpenCart 1.4.9.4) выпущена 14-го Апреля, 2011

У меня такая же проблема как в вопросе 2:

Вместо правильных ссылок пишет

<b>Notice</b>: Undefined variable: enable in <b>Z:\home\opencart\www\admin\view\template\catalog\product_list.tpl</b> on line <b>17</b>

View-source показывает:

<a onclick="$('#form').attr('action', '<b>Notice</b>: Undefined variable: enable in <b>Z:\home\opencart\www\admin\view\template\catalog\product_list.tpl</b> on line <b>17</b>'); $('#form').submit();" class="button"><span>Включено</span></a> 
<a onclick="$('#form').attr('action', '<b>Notice</b>: Undefined variable: disable in <b>Z:\home\opencart\www\admin\view\template\catalog\product_list.tpl</b> on line <b>18</b>'); $('#form').submit();" class="button"><span>Выключено</span></a>

Естественно никуда не переходит.

У кого-нибудь есть решение?

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


Нашел решение сам

Разница в том что ocStore v0.2.0 и OpenCart 1.4.9.4 различаются.

В ocStore v0.2.0 уже вставлено много модулей.

Когда заливаешь модуль "Фильтр товаров в категории 2.0" - он заменяет некоторые файлы,

которые подходят для OpenCart 1.4.9.4, но не имеют изменений которые внесены в ocStore v0.2.0

Здесь

admin\controller\catalog\product.php
добавляем методы

public function enable() {
	$this->changeStatusProducts(1);
	}

	public function disable() {
		$this->changeStatusProducts(0);
	}

	private function changeStatusProducts($status) {
		$this->load->language('catalog/product');
		$this->load->model('catalog/product');

		if (isset($this->request->post['selected']) && $this->user->hasPermission('modify', 'catalog/product')) {
			$this->model_catalog_product->changeStatusProducts($this->request->post['selected'], $status);

			$url = '';
			if (isset($this->request->get['filter_name'])) {
				$url .= '&filter_name=' . $this->request->get['filter_name'];
			}
			if (isset($this->request->get['filter_model'])) {
				$url .= '&filter_model=' . $this->request->get['filter_model'];
			}
			if (isset($this->request->get['filter_price'])) {
				$url .= '&filter_price=' . $this->request->get['filter_price'];
			}
			if (isset($this->request->get['filter_quantity'])) {
				$url .= '&filter_quantity=' . $this->request->get['filter_quantity'];
			}
			if (isset($this->request->get['filter_status'])) {
				$url .= '&filter_status=' . $this->request->get['filter_status'];
			}
			if (isset($this->request->get['page'])) {
				$url .= '&page=' . $this->request->get['page'];
			}
			if (isset($this->request->get['sort'])) {
				$url .= '&sort=' . $this->request->get['sort'];
			}
			if (isset($this->request->get['order'])) {
				$url .= '&order=' . $this->request->get['order'];
			}

			$this->session->data['success'] = $this->language->get('text_success');
			$this->redirect(HTTPS_SERVER . 'index.php?route=catalog/product&token=' . $this->session->data['token'] . $url);
		}

		$this->document->title = $this->language->get('heading_title');
		$this->getList();
	}

и здесь

admin\model\catalog\product.php
вставляем метод

public function changeStatusProducts($products, $status) {
		function check_int($a) { return (int)$a; }
		$arr_products = array_map('check_int', $products);
		$products = implode("' OR product_id = '", $arr_products);
		$this->db->query("UPDATE " . DB_PREFIX . "product SET status = '" . (int)(bool)$status . "' WHERE product_id = '" . $products . "'");

		$this->cache->delete('product');
	}
Надіслати
Поділитися на інших сайтах


Нашел решение сам

Разница в том что ocStore v0.2.0 и OpenCart 1.4.9.4 различаются.

В ocStore v0.2.0 уже вставлено много модулей.

Когда заливаешь модуль "Фильтр товаров в категории 2.0" - он заменяет некоторые файлы,

которые подходят для OpenCart 1.4.9.4, но не имеют изменений которые внесены в ocStore v0.2.0

...

Пытаюсь разобраться с этой же проблемой. Попробовал Ваш вариант, у меня не вышло.

Путем перебора вариантов получилось. Пишу как:

Заливаем на сервер файл из ocStore v0.2.0

admin\controller\catalog\product.php

и редактируем, добавляя после 591 строки:

        // Start Openstore filter 2.0
        $this->data['tab_filter'] = $this->language->get('tab_filter');
        // End Openstore filter 2.0

Заливаем на сервер файл из openstore filter 2.0

admin\model\catalog\product.php

и его редактируем, как написал symbianm, добавляя после 298 строки:

// add
  public function changeStatusProducts($products, $status) {
                function check_int($a) { return (int)$a; }
                $arr_products = array_map('check_int', $products);
                $products = implode("' OR product_id = '", $arr_products);
                $this->db->query("UPDATE " . DB_PREFIX . "product SET status = '" . (int)(bool)$status . "' WHERE product_id = '" . $products . "'");

                $this->cache->delete('product');
        }
// end

Прикрепляю здесь уже исправленные файлы. Залить на сервер с перезаписью.

PS Модуль Фильтр товаров в категории 2.0 устанавливался на чистую ocStore v0.2.0.

PSS Как активировать выборку по цене?

bug_buttons_on_off.zip

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


ukrgeraldika нет ее в этой версии.
Надіслати
Поділитися на інших сайтах

Здравствуйте, есть уже готовый магазин на ocStore Version 0.2.0 и как раз не хватает вашего модуля)

Было бы просто супер если бы была бы инструкция как поставить данный модуль не с нуля а уже на действующий магазин. Шаблон стоит shoppica

Заранее благодарен!

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


Notice: Undefined variable: button_disable in Z:\home\site\www\admin\view\template\catalog\product_list.tpl on line 18

Notice: Undefined variable: button_enable in Z:\home\site\www\admin\view\template\catalog\product_list.tpl on line 17

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


Необходимо сделать вкладку с выводом характеристик товара, основанного на этом модуле.

Т.е. мы добавляем характеристику нужному товару, а у каждого товара есть вкладки Описание, Фото, Отзывы, Рекомендуем.

Хочу вкладку Характеристики с выводом списка этих самых характеристик, основанных на этом модуле.

Допустим, вкладку отдельную я знаю как сделать, но как вывести этот список на неё?

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


Необходимо сделать вкладку с выводом характеристик товара, основанного на этом модуле.

Т.е. мы добавляем характеристику нужному товару, а у каждого товара есть вкладки Описание, Фото, Отзывы, Рекомендуем.

Хочу вкладку Характеристики с выводом списка этих самых характеристик, основанных на этом модуле.

Допустим, вкладку отдельную я знаю как сделать, но как вывести этот список на неё?

#51 - здесь описано как это сделать

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


Fatal error: Call to a member function getOptionsByProductId() on a non-object in /shop/catalog/controller/product/product.php on line 128
В файл catalog\model\catalog\filter.php изменения внес:

public function getOptionsByProductId($product_id) {

    $option_data = array();

    $option_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "category_option co LEFT JOIN " . DB_PREFIX . "product_to_value p2v ON (co.option_id = p2v.option_id) LEFT JOIN " . DB_PREFIX . "category_option_description cod ON (co.option_id = cod.option_id) WHERE p2v.product_id = '" . (int)$product_id . "' AND cod.language_id = '" . (int)$this->config->get('config_language_id') . "' AND co.status = '1' ORDER BY co.sort_order");

    foreach ($option_query->rows as $option) {
      
      $value_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "category_option_value cov LEFT JOIN " . DB_PREFIX . "category_option_value_description covd ON (cov.value_id = covd.value_id) LEFT JOIN " . DB_PREFIX . "product_to_value p2v ON (cov.value_id = p2v.value_id) WHERE p2v.product_id = '" . (int)$product_id . "' AND cov.option_id = '" . (int)$option['option_id'] . "' AND covd.language_id = '" . (int)$this->config->get('config_language_id') . "'");

      $option_data[] = array(
        'option_id' => $option['option_id'],
        'name' => $option['name'],
        'value_name' => $value_query->row['name']
      );
    }
    return $option_data;
  }

Здравствуйте, есть уже готовый магазин на ocStore Version 0.2.0 и как раз не хватает вашего модуля)

Было бы просто супер если бы была бы инструкция как поставить данный модуль не с нуля а уже на действующий магазин. Шаблон стоит shoppica

Заранее благодарен!

С помощью программки WinMerge смог внести все необходимые изменения в работающий магазин.
Надіслати
Поділитися на інших сайтах


я буду рад, если кто-то просто ткнет мне пальцем в какую строчку это добавлять, чтобы все заработало :)

Перед закрывающей класс скобкой }

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

Оттестил фильтр - просто супер, вот вопрос, как быть если товаров около 40000???

Какие строки в sql затрагивает при создании очередного фильтра?

Как сделать чтобы после добавления очередной "галки", не выбрасывало наверх страницы?

Модуль не дружит с "движковой сортировкой товара" - проверил на своем магазе.

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


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

При установке галки происходит переход, как в категорию. Можно приделать костыль на js, чтобы с параметром filter опускало вниз... кому как.

С сортировкой дружится, проверьте $url в массиве sorts, где-то уже писал.

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

badimka, При установке галки происходит переход, как в категорию. Можно приделать костыль на js, чтобы с параметром filter опускало вниз... кому как.

С сортировкой дружится, проверьте $url в массиве sorts, где-то уже писал.

Насчет сортировки - сначала отфильтровал товары, потом нажал сортировку по ценам, все фильтры сбросились, но если делать в обратном порядке (сначала сортировку, а потом фильтры) тогда все работает, как я понимаю нужен костыль на js?

может ли, кто-нибудь написать его на форуме?

Когда выйдет фильтр товаров по цене как на тестовой площадке?

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


badimka, костыль не нужен, тем более js, смотрите пост #32 и #35
Надіслати
Поділитися на інших сайтах

А возможно это модуль перенести из бокового шаблона в шаблон категории (где список товаров)? Например, между название категории и товарами.

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


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

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

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

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

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

Вхід

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

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

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

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

Important Information

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