Модификатор Фильтр товара по наличию Описание Добавляет возможность на странице категории, отфильтровать товары которых нет в наличии Установка: Распакуйте zip архив; Установите ocmod файл через "Модули - Установка расширений"; Обновите модификатор На заметку: В модификаторе в строке 60 есть проверка на статус товара. Там указывается id состояния на складе. Например если вы желаете оставить как в наличии товары со статусом Ожидание 2-3 дня то ид ставьте 6 (по умолчанию оно и стоит) Автор: Оригинал модуля тут: http://www.opencart.com/index.php?route=extension/extension/info&extension_id=22227 Что сделано мной: Я его русифицировал и подправил стили, чтобы чекбокс более менее выглядел нормально. Проверил на последней сборке 2.2.0.0
вы пишите все данные. Модификаторы всегда проверяются только на стандартном шаблоне. Всегда смотрят лог ошибок модификатора, а так же лог ошибок движка.
Позволил себе немножко дополнить модуль.... Код: <file path="catalog/view/theme/*/template/product/category.tpl"> <operation> <search><![CDATA[ <?php if ($products) { ?> ]]></search> <add position="replace"><![CDATA[ <?php if ($products || $instock) { ?> ]]></add> </operation> Иначе если в категории нет товара в наличии, то уже не получится отжать галочку Только в наличии. Небольшая правка для категорий, которые отображают товары подкатегорий... Код: <operation> <search><![CDATA[ <?php if (!$categories && !$products) { ?> ]]></search> <add position="replace"><![CDATA[ <?php if (!$categories && !$products || $categories && $instock && !$products) { ?> ]]></add> </operation> Ну и чтоб в отсутствии товара не мозолили глаза нули (страниц 0 товаров 0 и т.п.) Код: <operation> <search><![CDATA[ <div class="col-sm-6 text-right"><?php echo $results; ?></div> ]]></search> <add position="replace"><![CDATA[ <?php if ($pagination) { ?> <div class="col-sm-6 text-right"><?php echo $results; ?></div> <?php } ?> ]]></add> </operation> Да и вообще если весь товар уместился на одну страницу, то не будет показывать результат выдачи. Только при наличии пагинации. Теперь пытаюсь понять как бы мне это дело запомнить. Точнее запомнить то я запомнил с помощью localStorage, но по аналогии с кнопками list/grid-view.... PHP: if (localStorage.getItem('.....') == '.....') { ..........trigger('click') ....сделать не получается, ибо кликает без остановки. P.S. А что на кнопки list/grid-view тоже постоянно кликает???[/code]
Например мы имеем категорию в которой отображаем товары всех подкатегорий. В итоге товара на несколько страниц, допустим 6 страниц. Жмякаем Только в наличии, стало 3 страницы, ибо товар которого нет в наличии не попал в выдачу. Однако если мы решим полистать эти страницы, то нас ждёт разочарование, т.к. фильтрация наличия слетает при переходе на другую станицу. Хотел изобразить что то типа такого.... Код: <script type="text/javascript"><!-- var url_filter = '<?php echo $url; ?>'; $('#input-instock').on('click', function() { url = url_filter; var instock = $('#content input[name=\'instock\']').val(); if (instock == '1') { url += ''; } else if (instock == '') { url += '&instock=true'; localStorage.setItem('view', 'instock'); } else { url += ''; } location = url; }); if (localStorage.getItem('view') == 'instock') { $('#input-instock').trigger('click'); } </script> Но заимел бесконечный цикл нажатия на чекбокс. Надо придумывать что то другое.
в \catalog\controller\product\category.php есть PHP: $pagination->url = $this->url->link('product/category', 'path=' . $this->request->get['path'] . $url . '&page={page}'); в нее передается $url который формируется выше. А выше посмотреть есть примеры. Т.е нужно еще добавить PHP: if (isset($this->request->get['instock'])) { $url .= '&instock=true'; }
@Vlad, спасибо за наводку! Сделал немного по другому, ибо если работать с $url, то не получится снять галочку. Сделал так.... Код: <operation> <search><![CDATA[ $pagination = new Pagination(); ]]></search> <add position="before"><![CDATA[ if (isset($this->request->get['instock'])) { $instock_filter = '&instock=true'; } else { $instock_filter = ''; } ]]></add> </operation> <operation> <search><![CDATA[ $pagination->url = $this->url->link('product/category', 'path=' . $this->request->get['path'] . $url . '&page={page}'); ]]></search> <add position="replace"><![CDATA[ $pagination->url = $this->url->link('product/category', 'path=' . $this->request->get['path'] . $url . '&page={page}' . $instock_filter); ]]></add> </operation> Так и по страничкам можно листать с фильтрацией по наличию и можно снять галочку.
может подскажете как вывести все товары из наличия на одну страницу а кнопку разместить там где удобно
вопрос не по теме. А так поиск помогает найти ответ http://forum.opencart-russia.ru/thr...nicu-i-vyvesti-tam-vse-tovary.1304/#post-8225
спасибо. а как через этот модуль вывести товары те что в наличии, модуль я уставновил но в категории пусто
Cложно ли будет "подружить" данный модуль с ocfilter? Ибо когда фильтр по наличию активен - он сбрасывается при выборе опций ocfilter. Пробовал так: catalog/controller/extension/module/ocfilter.php $instock_true = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; if (preg_match('instock', $instock_true)) { $json['href'] = str_replace('&', '&', $this->ocfilter->link($this->ocfilter->getParams())) . '?instock=true'; } else { $json['href'] = str_replace('&', '&', $this->ocfilter->link($this->ocfilter->getParams())); } Но это не работает(
А вот это что вообще такое? OpenCart вроде бы умеет читать query params: PHP: if (isset($this->request->get['instock'] && ) Как подружить с OCFilter надо уточнять у разработчика модуля или лопатить код. По сути надо всегда конкатенировать условие instock если оно true.
Да, но увы( PHP: if (isset($this->request->get['instock'])) { $json['href'] = str_replace('&', '&', $this->ocfilter->link($this->ocfilter->getParams())) . '?instock=true'; } else { $json['href'] = str_replace('&', '&', $this->ocfilter->link($this->ocfilter->getParams())); }