Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...

[Модуль] Фильтр товаров в категории 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

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


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

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

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

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

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


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

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

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

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

#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 пользователей

    • Нет пользователей, просматривающих эту страницу.
×
×
  • Создать...

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

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