Всем привет.
Задача была такая:
на странице категории товара рядом с полем выбора сортировки должен присутствовать чекбокс, позволяющий скрыть товары, которых нет в наличии.
Пример здесь: http://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.phpdefine( '_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<?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 -->
<input type="checkbox" id="filter_in_stock_label" name="filter_in_stock" value="1" onclick="order.submit()" <?echo $filter_in_stock_status?>>
<label for="filter_in_stock_label">Показывать только товары в наличии</label>
</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/26712322