Не секрет, что структура VirtueMart довольно сложна. Для людей, малознакомых с этим компонентом его подгонка под дизайн превращается в настоящую пытку. Все элементы разбросаны по разным файлам и их поиск вызывает затруднения. Особое место в этом хаосе занимает меню каталога товаров VirtueMart. Главным его недостатком является то, что при нескольких стилях отображения меню и различных скриптах, как это не странно, напрочь отсутствует возможность построения меню с помощью маркированного списка(UL LI). Это крайне неприятно, учитывая то, что во-первых, такую систему использует Joomla (меню очень многих шаблонов построены именно на подобных списках), во-вторых, UL LI используют большинство современных JQuery и Mootools-меню. В этой статье я расскажу как можно создать меню VirtueMart построенное с помощью списка и стилизовать его под используемый шаблон.
Первое, что нужно принять – встроенными средствами VirtueMart меню UL LI построить не удастся (конечно мы не говорим о переписывании кода модуля). Мне кажется очень странным, что разработчики не включили в модуль такой способ отображения меню, но рано или поздно это произойдет. Таким образом, нам понадобится дополнительное расширение для VirtueMart. К счастью такое имеется, и называется XHTML Product Categories for Virtuemart. XHTML Product Categories for Virtuemart это модуль, выводящий меню VirtueMart в виде маркированного списка (UL LI). Модуль бесплатный. Скачать его можно с сайта разработчика по этой ссылке.
Настройки модуля крайне скудны(смотрите ниже):
но свои функции он выполняет хорошо.
Теперь немного поговорим о настройке модуля. Я вижу 2 варианта создания меню:
- Меню VirtueMart должно по стилю быть таким же, как и меню используемого шаблона Joomla.
- Меню должно иметь уникальный стиль и быть построено с помощью отдельного скрипта. Как например в статье про создание выпадающего меню.
Так или иначе, с базовыми настройками меню будет иметь следующий вид:
1 |
<ul class="vmLinkMenu"> |
1 |
$html='<ul'.($firstPass?' class="vmLinkMenu'.$class_sfx.'"':'').'>';
|
1 |
$html='<ul'.($firstPass?' class="menu'.$class_sfx.'"':'').'>';
|
Теперь, когда наше VirtueMart-меню приобрело практически такой же вид, как и меню Joomla, остается еще немного поднастроить CSS и получить требуемый результат. В случае с уникальным меню все немного сложнее, но теперь делается аналогично выпадающему меню Joomla(ссылка на статью была выше).
Кроме всего прочего XHTML Product Categories for Virtuemart имеет пару дополнительных опций, позволяющих сделать нечто… Лично мне это «нечто» не понятно, но если кто-то придумает, как его толково использовать и напишет в комментариях, я, да и думаю многие другие читатели, будут ему благодарны. «Нечто» заключается в следующем:
Опции «Link list starting level» и «Link List last level» позволяют вывести только уровни вложенности меню от X до Y. Например, если установить в этих опциях 1 и 2 соответственно, будут показаны только пункты 1 и 2 уровней вложенности(т.е. выпадающий и подвыпадающий). Верхний уровень, как впрочем 3 и последующие будут скрыты. Если указать 0 и 0, будут показаны только основные пункты(без подпунктов). Да и ладно, если бы на этом все заканчивалось. Нет. Показываются только подкункты активного пункта меню. Тут, наверное, ничего непонятно. Постараюсь объяснить на примере.
Допустим, есть такое меню:
– пункт 1
–– подпункт 1.1
–– подпункт 1.2
– пункт 2
–– подпункт 2.1
–– подпункт 2.2
Если в модуле у нас выставлены настройки «1» и «1», то по идее должны быть показаны:
–– подпункт 1.1
–– подпункт 1.2
–– подпункт 2.1
–– подпункт 2.2
но реально получается следующее:
а) если активен пункт 1:
–– подпункт 1.1
–– подпункт 1.2
б) если активен пункт 2:
–– подпункт 2.1
–– подпункт 2.2
Я, честно говоря, сколько не думал, как это можно использовать, так и не придумал ничего вразумительного. Но отбросив эти странные опции, остается все равно отличный модуль.
Еще одно замечание касается SEF. Т.к. модуль сторонний, изначально SEF-ссылки в нем не работают. Но это решается просто. Достаточно заменить всего одну строчку:
1 |
$link=JFilterOutput::ampReplace(JURI::base()."index.php?option=com_virtuemart&page=shop.browse&category_id=".$menu_element['id'].$Itemidmod);
|
1 |
$link= JRoute::_("index.php?option=com_virtuemart&page=shop.browse&
|
После этого ссылки, построенные с использованием SH404SEF, в данном меню будут отображаться корректно.
К сожалению, выпустив версию модуля 1.0 в конце 2008 года, разработчики, по всей видимости, прекратили его совершенствование, поэтому он не имеет некоторых необходимых опций, которые сделали бы его просто незаменимым, например, вывод подкатегорий определенной категории через указание ее ID. Возможно, если будет свободное время, я немного усовершенствую этот модуль. Также предлагаю попрактиковаться вам и попробовать добавить несколько дополнительных опций, выводящих категории VirtueMart в разном виде. Код модуля прост, так что это не должно составить труда. При этом все работающие расширения XHTML Product Categories for Virtuemart созданные читателями, будут выложены в конце этой статьи с бонусом в виде прямых ссылок на сайты создателей.
Не подскажите в каком файле менять? (в том же где меняли вид модуля - не нашел)
Мне помогло
И польза очень большая.
Большое ему за это СПАСИБО и уважение!!!
http://wedal.ru/forum/VirtueMart/96-Vyvesti-na-glavnoj-spisok-kategorij-i-podkategorij.html
Далее обсуждаем там.
Подскажите пожалуйста, необходимо сделать меню вида:
-Категория1
--Товар1
--Товар2
-Категория2
--Товар3
Выжеуказанный модуль выводит исключительно категории.
Как с наименьшими усилиями можно это сделать?
Заранее спасибо
http://extensions.joomla.org/extensions/extension-specific/virtuemart-extensions/virtuemart-navigation
может что подойдет.
А вообще(я так понимаю товаров у вас не много) это можно сделать создав меню Joomla и вручную назначив каждому из его пунктов категорию VirtueMart, а каждому подпункту - товар.
Товаров действительно мало, но хотелось, чтобы тот кто будет заполнять, не ссовершал лишних движений.
Спасибо.
У меня на сайте меню virtuemart-a организованно следующим образом:
1. Японские КМУ
1.1. UNIC
1.2. TADANO
....
1.6. SAKAI
2. Корейские КМУ
2.1. SOOSAN
2.2. KANGLIM
.....
2.5 DONGYANG
и т.д. в такой иерархии, т.е. есть основная категория и дочерняя и всё. Соответственно, на сайте меню показывается не развернутым, т.е. только первые категории, т.е.:
1. Японские КМУ
2. Корейские КМУ
Раньше всё было хорошо, и при нажатии на ссылку "Японские КМУ" открывались её дочерние категории, т.е.:
1. Японские КМУ
1.1. UNIC
1.2. TADANO
....
1.6. SAKAI
А теперь не понять из-за чего при нажатии на ту же ссылку "Японские КМУ" появляется надпись,... "В данной категории нет товаров." и не открываются дочерние категории, т.е. пользователь попадает в тупик ...
В чём может быть проблема?
Тип модуля: mod_virtuemart, тот который отвечает за вывод стадартного меню категорий, подкатегорий в магазине VirtueMart.
Возможно Вы используете версию VirtueMart 1.1.9 ,а в ней действительно есть глюк с товарами в подкатегории!
Решение: в файле \administrator\components\com_virtuemart\html\shop.browse.php в строке 86:
elseif( $num_rows == 0 && empty($product_type_id) && empty($child_list)) {
echo $VM_LANG->_('EMPTY_CATEGORY');
Нужно изменить условие, поставив перед empty($child_list) восклицательный знак:
elseif( $num_rows == 0 && empty($product_type_id) && !empty($child_list)) {
echo $VM_LANG->_('EMPTY_CATEGORY');
Ответ нашел сдесь: http://slaffko.name/blog/item/oshibka-v-virtuemart-119-v-dannoj-kategorii-net-tovarov.html
Суффикс класса модуля моего меню был art-vmenu. Поэтому строку
$html='';
я заменил на
$html='';
Кроме того уже в самом этом новом модуле я поставил суффикс класса модуля art-vmenu.
Получилось меню магазина, как меню joomla!!!
НО, у меня меню раздвигалось (скрипт какой-то). А в этом измененном меню оно не открывается и отображается только верхний уровень. Хотя пытался играть с этими странными параметрами
Нехороший человек стибрил!!!
Никак иначе не получается настроить стиль вывода подкатегорий отличный о стиля вывода категорий.
.baseclass ul li ul
.baseclass ul li ul li
.baseclass ul li ul li a
Спасибо, но так не работало, перекрывались классы.
Вообщем я добавил класс, если нужно выложу код, там пару условии...