Чекбокс "Показывать только товары, которые есть в наличии"

joomlaforum.ru/index.php/topic,166396.0.html

 

Всем привет.
Задача была такая:
на странице категории товара рядом с полем выбора сортировки должен присутствовать чекбокс, позволяющий скрыть товары, которых нет в наличии.

Пример здесь: 4play.by/catalog/category/65.html

Огромное Спасибо за решение товарищам a-littlebox и mr.brightside с форума вирты!

Решение:

Красным цветом выделен код, который необходимо добавить в файлы.

В файле: administrator/components/com_virtuemart/html/shop_browse_queries.php

Цитировать
$where_clause[] = "((`product_parent_id`='0') OR (`product_parent_id`='')) ";
$filter_in_stock = $_SESSION['filter_in_stock'];
if( !$perm->check("admin,storeadmin") ) {
$where_clause[] = "`product_publish`='Y' ";
$where_clause[] = "`category_publish`='Y' ";
if((CHECK_STOCK && PSHOP_SHOW_OUT_OF_STOCK_PRODUCTS != "1") or $filter_in_stock == "1") {
$where_clause[] = 'product_in_stock > 0';
}
}
if( $perm->check("admin,storeadmin") && $filter_in_stock == "1") $where_clause[] = 'product_in_stock > 0';

В файле: components/com_virtuemart/virtuemart_parser.php
Цитировать
define( '_VM_PARSER_LOADED', 1 );
if ($_REQUEST['filter_in_stock'] == "1") $_SESSION['filter_in_stock'] = "1";
if ($_REQUEST['filter_in_stock'] == "0") $_SESSION['filter_in_stock'] = "0";
}
?>

В файле: components/com_virtuemart/themes/default/templates/browse/includes/browse_orderbyform.tpl.php
Цитировать

<?
if ($_SESSION['filter_in_stock'] == "1")
$filter_in_stock_status = "checked";
?>
<input type="hidden" name="filter_in_stock" value="0"> <!-- send value equal 0 if not checked -->
&nbsp;&nbsp;<input type="checkbox" name="filter_in_stock" value="1" onclick="order.submit()" <?echo $filter_in_stock_status?>> Показывать только товары в наличии
</form>
Так как в коде последнего файла присутствует кириллица, сохраняйте его в кодировке UTF-8.

Всё, хак реализован!

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

Если хотите, чтобы галочка "Показывать только товары в наличии" стояла по-умолчанию, то
В файле: components/com_virtuemart/virtuemart_parser.php
нужно после добавленного нами
Цитировать
define( '_VM_PARSER_LOADED', 1 );
if ($_REQUEST['filter_in_stock'] == "1") $_SESSION['filter_in_stock'] = "1";
if ($_REQUEST['filter_in_stock'] == "0") $_SESSION['filter_in_stock'] = "0";

дописать еще
Цитировать
if ($_SESSION['filter_in_stock'] == "1");
if ($_SESSION['filter_in_stock'] == "0");
else $_SESSION['filter_in_stock'] = "1";

Прикрепил файлы реализованного хака для версии VirtueMart 1.1.8 stable. Для других версий лучше самим вносить изменения в файлы.
http://ifolder.ru/26517039

Добавить комментарий