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

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

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

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

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

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

...

то:

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

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


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

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


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

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

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


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

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

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

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

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

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


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

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

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

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

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

#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

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


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

Когда будет апдейт для версии 1.5 ?

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


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

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

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


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

Ritter, конечно можно.

я выносил вообще в header.tpl и через ajax подгружал.

  • +1 1

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


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

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

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

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

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

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

Войти

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

Войти

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

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

×