Столкнулся с задачей, нужно сделать фильтрацию товара в категории по подкатегориям подобно фильтрации по производителям. Вроде тема простая, но провозился долго. Искал модуль, но так и не нашел. Есть подобные по функционалу модули Phoca VirtueMart Category Module и
VirtueMart Boh! Category Filter. Мне они не подошли. Мне нужно было, чтоб при открытии категории, подкатегории этой категории раскрывались выпадающим списком как производители.
Решил так:
Взял стандартный модуль "VirtueMart Категория" и переделал его с помощью CSS.
Из файла modules\mod_virtuemart_category\tmpl\default.php повырезал куски, чтоб он не показывал родителя. Да, версия VirtueMart 3.0.12
У меня получился такой код этого файла:
<?php // no direct access
defined('_JEXEC') or die('Restricted access');
//JHTML::stylesheet ( 'menucss.css', 'modules/mod_virtuemart_category/css/', false );
/* ID for jQuery dropdown */
$ID = str_replace('.', '_', substr(microtime(true), -8, 8));
$js="
//<![CDATA[
jQuery(document).ready(function() {
jQuery('#VMmenu".$ID." li.VmClose ul').hide();
jQuery('#VMmenu".$ID." li .VmArrowdown').click(
function() {
if (jQuery(this).parent().next('ul').is(':hidden')) {
jQuery('#VMmenu".$ID." ul:visible').delay(500).slideUp(500,'linear').parents('li').addClass('VmClose').removeClass('VmOpen');
jQuery(this).parent().next('ul').slideDown(500,'linear');
jQuery(this).parents('li').addClass('VmOpen').removeClass('VmClose');
}
});
});
//]]>
" ;
$document = JFactory::getDocument();
$document->addScriptDeclaration($js);?>
<ul class="VMmenu<?php echo $class_sfx ?>" id="<?php echo "VMmenu".$ID ?>" >
<?php foreach ($categories as $category) {
$active_menu = 'class="VmClose"';
$caturl = JRoute::_('index.php?option=com_virtuemart&view=category&virtuemart_category_id='.$category->virtuemart_category_id);
//if ($active_category_id == $category->virtuemart_category_id) $active_menu = 'class="active"';
if (in_array( $category->virtuemart_category_id, $parentCategories)) $active_menu = 'class="VmOpen"';
?>
<li <?php echo $active_menu ?>>
<div>
<?php echo JHTML::link($caturl, $cattext);
if ($category->childs) {
?>
<?php
}
?>
</div>
<?php if ($category->childs) { ?>
<ul class="menu<?php echo $class_sfx; ?>">
<?php
echo '<div class="firsttext"><a href="'.JRoute::_('index.php?option=com_virtuemart&view=category&virtuemart_category_id='.$category->virtuemart_category_id).'">Выбрать группу</a></div>';
foreach ($category->childs as $child) {
$active_child_menu = 'class="VmClose"';
$caturl = JRoute::_('index.php?option=com_virtuemart&view=category&virtuemart_category_id='.$child->virtuemart_category_id);
$cattext = vmText::_($child->category_name);
if ($child->virtuemart_category_id == $active_category_id) $active_child_menu = 'class="VmOpen"';
?>
<li <?php echo $active_child_menu ?>>
<div ><?php echo JHTML::link($caturl, $cattext); ?></div>
<?php } ?>
</ul>
<?php } ?>
</li>
<?php
} ?>
</ul>
и стили в components\com_virtuemart\assets\css\vm-ltr-site.css
.VMmenu ul,.VMmenu li{
list-style-type: none;
background-image:none;
}
/* Скрывает подпункт предыдущего меню */
li.VmOpen div a {
display:none;
}
li.VmOpen ul.menu li.VmOpen div a {
display:block;
color:#08C!important;
}
ul.VMmenu {
padding: 0px;
margin:0;
float:left;
display:block;
width:250px;
background:#fff;
}
li.VmClose div a {display:none;}
li.VmOpen ul.menu li.VmClose div a {
display:block;
}
li.VmOpen ul.menu {
display:block;
background:#fff;
background: #FFF url("../images/vmgeneral/arrow_down.png") no-repeat scroll right top;
border: 1px solid #CAC9C9;
border-radius: 4px;
height:auto;
margin:0;
padding:1px 2px 1px 10px;
float:left;
color:#282f7b;
height:20px;
display:block;
width:240px;
position:absolute;
}
li.VmOpen div a:hover {color:#08C!important;}
li.VmOpen ul.menu li.VmClose div a {
color:#282f7b;
}
li.VmOpen .firsttext a {
display: block;
position:relative;
z-index:1;
line-height:20px;
color:#282f7b;
line-height:20px;
height:auto!important;
}
li.VmOpen ul li:first-child {
display: none;
}
li.VmOpen ul li:not(:first-child) {
display: none;
}
li.VmOpen ul:hover li {
display: block;
margin:0!important;
}
/* активный первый пункт */
li.VmOpen ul.menu li.VmOpen {
color:#000000;
background:#fff;
padding:0 ;
line-height:20px;
font-size:12px!important;
height:20px!important;
margin:-20px 20px 0 0;
z-index:100;
position:relative;
display:block!important;
}
li.VmOpen ul.menu:hover {
display:block;
height:auto!important;
background:#fff;
overflow: auto;
position:absolute;
z-index:100;
}
Реализовал на сайте
http://technolux.dp.ua/ на момент написания поста там еще старый сайт.Новый на локале пока.