Все подобные модули платные, поэтому я решил сделать некий компромиссный вариант
Для этого необходимо:
1. Скачать и установить вот этот модуль:
http://extensions.joomla.org/extensions/structure-a-navigation/menu-systems/accordion-menus/61152. Скачать и установить вот этот плагин для этого модуля:
http://extensions.joomla.org/extensions/structure-a-navigation/menu-systems/accordion-menus/61293. Немного модифицировать
mod_AccordionMenuApplestyle.php и
ps_product_category.phpМодификация
mod_AccordionMenuApplestyle.php: (привожу окончательный код)
defined('_JEXEC') or die('Restricted access');
require_once (dirname(__FILE__).DS.'helper.php');
require_once(CLASSPATH.'ps_product_category.php');
$ps_product_category = new ps_product_category();
$tree=$ps_product_category->getCategoryTreeArray();
$str="{Accordion_Menu_Apple_style}";
foreach ($tree as $treeitem) {
if (($treeitem["category_parent_id"]==0) && ($ps_product_category->has_childs($treeitem["category_child_id"])))
{
$str.=$treeitem["category_name"]."\n" . $ps_product_category->get_subcategory($treeitem["category_child_id"],"sublevel")."\n";
}
}
$str.="{/Accordion_Menu_Apple_style}";
require(JModuleHelper::getLayoutPath('mod_AccordionMenuApplestyle'));
?>
и в файле
ps_product_category.php, модификация функции function get_subcategory( $category_id, $css_class = "" )
function get_subcategory( $category_id, $css_class = "" ) {
global $sess;
$ps_vendor_id = $_SESSION["ps_vendor_id"];
if( $css_class != "" ) {
$class= "class=\"$css_class\"";
}
else
$class = "";
$db = new ps_DB;
$q = "SELECT category_id, category_child_id,category_name FROM #__{vm}_category,#__{vm}_category_xref ";
$q .= "WHERE #__{vm}_category_xref.category_parent_id='$category_id' ";
$q .= "AND #__{vm}_category.category_id=#__{vm}_category_xref.category_child_id ";
//$q .= "AND #__{vm}_category.vendor_id='$ps_vendor_id' ";
$q .= "AND #__{vm}_category.category_publish='Y' ";
$q .= "ORDER BY #__{vm}_category.list_order, #__{vm}_category.category_name ASC";
$db->setQuery($q);
$db->query();
$html = "";
$nbsp = "";
while($db->next_record()) {
$html .= "- <a class=\"sublevel\" title=\"".$db->f("category_name")."\" href=\"";
$html .= $sess->url(URL . "index.php?page=shop.browse&root=$category_id&category_id=" .$db->f("category_child_id"));
$html .= "\" $class>$nbsp".$db->f("category_name");
$html .= ps_product_category::products_in_category( $db->f("category_child_id") );
$html .= "</a>\n";
}
return $html;
}
После этих модификация модуль начинает показывать категории VirtueMart в Ассordion стиле, но есть
ограничение: все пункты меню, которые выводятся чезе этот модуль должны иметь потомков, иначе он не работает верно. Как вариант, пункты меню без дочерних элементов можно вывести сверху или снизу использую стандартное меню (после модификации ps_product_category.php работоспособность сохраняется)
3 недостатка:
1. Нет изменения класса или добавление уникально ID на активных дочерних элементов. Кстати и на платном расширении этого выделение активного пункта меню тоже нет.
2. Странный SEF. Вообще он есть там, но выглядит не так красиво при стандартном меню, то есть:
Сейчас выдает такие ссылки:
http://mysite.ru/root-category-49/category-50.html А хочется вот такие, как по стандартному:
http://mysite.ru/tuning-audi.htmlВ платно варианте ссылке более красивые.
3. При загрузке странице, всегда по умолчание раскрывается первый пункт меню. В платном варианте все изначально все пункты свернуты.
Надеюсь, кому-нибудь пригодится.