0 Пользователей и 1 Гость просматривают эту тему.
  • 0 Ответов
  • 1530 Просмотров
*

Eholov

  • Захожу иногда
  • 170
  • 14 / 0
Столкнулся с задачей,  нужно сделать фильтрацию товара в категории по подкатегориям подобно фильтрации по производителям. Вроде тема простая, но провозился долго. Искал модуль, но так и не нашел. Есть подобные по функционалу модули 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/ на момент написания поста там еще старый сайт.Новый на локале пока.
« Последнее редактирование: 17.12.2015, 10:57:05 от Eholov »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Модуль SJ Filter for VirtueMart - только 30 custom fields

Автор Alex_gs

Ответов: 0
Просмотров: 1072
Последний ответ 08.08.2022, 15:09:59
от Alex_gs
Решено: Валютный знак рубля в VirtueMart 2

Автор frostwar

Ответов: 10
Просмотров: 9966
Последний ответ 07.04.2020, 15:50:54
от liberator
Как вывести модуль в витрине VirtueMart?

Автор Дмитрий_76

Ответов: 1
Просмотров: 1473
Последний ответ 09.02.2020, 10:06:17
от AlexB
Редактирование карточки товара VirtueMart

Автор muserun

Ответов: 2
Просмотров: 2943
Последний ответ 31.10.2019, 12:53:51
от Sandruk1
Не отображается заголовок категориq VirtueMart

Автор galll72

Ответов: 0
Просмотров: 753
Последний ответ 04.02.2019, 15:08:15
от galll72