Новости Joomla

Как триггерить события для плагинов на манер Joomla 5+?В Joomla 6 должны удалить метод...

Как триггерить события для плагинов на манер Joomla 5+?В Joomla 6 должны удалить метод...

👩‍💻 Как триггерить события для плагинов на манер Joomla 5+?В Joomla 6 должны удалить метод triggerEvent(), с помощью которого раньше вызывались события для плагинов. Теперь чтобы в своём коде вызвать событие для плагина и получить от него результаты нужно:- создать объект класса события- передать в него параметры

use Joomla\CMS\Event\AbstractEvent;use Joomla\CMS\Factory;use Joomla\CMS\Plugin\PluginHelper;// Грузим плагины нужных группPluginHelper::importPlugin('system');// Создаём объект события$event = AbstractEvent::create('onAfterInitUniverse', [    'subject' => $this,    'data'    => $data, // какие-то данные    'article' => $article, // ещё материал вдовесок    'product' => $product, // и товаров подвезли]);// Триггерим событиеFactory::getApplication()->getDispatcher()->dispatch(    $event->getName(), // Тут можно строку передать 'onAfterInitUniverse'    $event);// Получаем результаты// В случае с AbstractEvent это может быть не 'result',// а что-то ещё - куда сами отдадите данные.// 2-й аргумент - значение по умолчанию, // если не получены результаты$results = $event->getArgument('result', []);
Плюсы такого подхода - вам не нужно запоминать порядок аргументов и проверять их наличие. Если вы написали свой класс события, то в плагине можно получать аргументы с помощью методов $event->getArticle(), $event->getData(), $event->getProduct() и подобными - реализуете сами под свои нужды. Если такой класс события написали, то создаёте экземпляр своего класса события и укажите его явно в аргументе eventClass
use Joomla\Component\MyComponent\Administrator\Event\MyCoolEvent;$event = MyCoolEvent::create('onAfterInitUniverse', [    'subject'    => $this,    'eventClass' => MyCoolEvent::class, // ваш класс события    'data'       => $data, // какие-то данные    'article'    => $article, // ещё материал вдовесок    'product'    => $product, // и товаров подвезли]);
Ожидаемо, что класс вашего события будет расширять AbsractEvent или другие классы событий Joomla.🙁 Есть неприятный нюанс - нельзя просто так вызывать событие и ничего не передать в аргументы. Аргумент subject обязательный. Но если вы всё-таки не хотите туда ничего передавать - передайте туда пустой stdClass или объект Joomla\registry\Registry.
@joomlafeed#joomla #php #webdev

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

refrizherator

  • Захожу иногда
  • 60
  • 1 / 0
версия 2.1.3.680, все ссылки работают отлично. Странное ограничение выходит как для платной версии! Жду ещё ответов.
*

root-master

  • Осваиваюсь на форуме
  • 48
  • 0 / 0
В настройках компонента параметр "Использование Элементов на постраничном ниспадающем списке" должен быть установлен в YES.
Проверьте этот момент.

Это находится здесь:

1. В административной панели сайта перейдите в компонент sh404SEF.
2. Откройте вкладку Configuration в sh404SEF.
3. На вкладке Configuration клик на Extensions configuration (или Plugins).
4. В открытом окне перейдите на вкладку VirtueMart.
5. В самом низу должна быть опция "Использование Элементов на постраничном ниспадающем списке" (“Using Items per page drop-down list”).
Флаг должен быть установлен в YES!
*

refrizherator

  • Захожу иногда
  • 60
  • 1 / 0
Проверил стоит "Да". Ещё есть варианты, я уже надежду теряю, а странички проиндексировались так как есть сейчас , если снесу sh404 будет очень фигово...    Жду ещё ваших вариантов!
*

refrizherator

  • Захожу иногда
  • 60
  • 1 / 0
Повторюсь, так как новая страничка:

СУТЬ:  Установил sh404SEF на сайт парфюмерии и косметики в Днепропетровске http://edp.dp.ua    Можете зайти и увидеть на странице с товарами http://edp.dp.ua/dolce-gabbana/view-all-products.html если клацнуть показать 10 или 20 и т.д.  будет ошибка на белом экране
Not Found

The requested URL /dolce-gabbana/view-all-products.html&limitstart=0&limit=25 was not found on this server.

Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.
Apache/2 Server at edp.dp.ua Port 80

А также при переключении страниц 1 2... или нажав кнопку слудующая...
Кроме плюсика предложить ничо не могу, если знаете, подскажите.
*

refrizherator

  • Захожу иногда
  • 60
  • 1 / 0
Я не понимаю, почему никто не отвечает, получается, что ни один тут не знает как это исправить, ведь вопрос уже задавался на форуме и там так же никто не ответил...! ?
*

root-master

  • Осваиваюсь на форуме
  • 48
  • 0 / 0
Данил, вопрос такой.

На странице два модуля, один - аккордион производителей, а другой стандартный модуль. Можно ли как-то сделать так, чтобы при клике на пункт меню в стандартном модуле, разворачивался определенный пункт меню в модуле аккордиона?

Пробовал твой вариант, не выходит.

Код
					$('.default').each(function(element, index){
element.parentNode.Accordion.display(element.index);
});

Или даже если установить несколько модулей аккордионов, как развернуть соответствующий пункт определенного модуля по клику пункта меню из другого модуля?
« Последнее редактирование: 24.10.2010, 22:41:20 от root-master »
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
Ну ты и задачки ставишь экзотические ))
Думаю нужно чтобы у всех пунктов был уникальный Id или класс, тоесть надо подправить функцию - декоратор в файле accordion.manufactorers.php(или как он там называется), скажем формировать по $node->attributes('id'). Так мы "проименуем" пункты, и сможем к ним обращаться чтоб раскрыть нужный.
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

root-master

  • Осваиваюсь на форуме
  • 48
  • 0 / 0
Ну вот смотри... Я добавил тем пунктам (в модуле аккордиона, файл manufacturers.accordion.php), которые нужно развернуть имя класса .default.

Код
					default:

// set parent class - check : has children
if (isset($node->ul) && $node->ul) {
$node->addAttribute('class', 'parent');
// set default menu item (мото на земле (id=1) / скутеры (id=4))
if ($node->attributes('id') == 1 or $node->attributes('id') == 4) {
$node->addAttribute('class', $node->attributes('class').' default');
}
}

Теперь надо как-то обратится к этим пунктам из другого модуля аккордиона по клику любого из пунктов его меню.
Пробовал сначала просто развернуть пункты меню, находясь в другом модуле:

Код
var menuMotoCatalog = $$('#accordion');
menuMotoCatalog.each(function(el){
alert(1);
if (menuMotoCatalog[index].hasClass('default')) {
element.parentNode.Accordion.display(element.index);
}
}

Но сюда почему-то не заходит даже :(

И так тоже не работает:

Код
var menuMotoCatalog = $$('#accordion');
//alert(menuMotoCatalog);
menuMotoCatalog.getElements('ul').each(function(el){
alert(1);
if (menuMotoCatalog[index].hasClass('default')) {
element.parentNode.Accordion.display(element.index);
}
}

В mootools я не силен, поэтому блуждаю в 3-х соснах. Может есть другие, простые подходы, чтобы раскрыть определенные пункты меню, находясь в другом модуле? Еще нужно как-то прикрутить событие клика, тоже головоломка.
« Последнее редактирование: 24.10.2010, 23:29:43 от root-master »
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
Так тебе какие именно пункты меню надо раскрывать? Те что имеют класс .default, или какието по индексу/идентификатору_категории?
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

root-master

  • Осваиваюсь на форуме
  • 48
  • 0 / 0
Цитировать
Те что имеют класс .default, или какието по индексу/идентификатору_категории?
На самом деле не принципиально. Я добавил класс .default самостоятельно, чтобы обеспечить доступ именно к данным пунктам меню для удобства.

Определенный id категории, который необходимо раскрывать, уже стоит в условии:

Код
							if ($node->attributes('id') == 1 or $node->attributes('id') == 4) {
$node->addAttribute('class', $node->attributes('class').' default');
}
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
По идее так должно работать(два бакса впереди а не один)
Код: javascript
					$$('.default').each(function(element, index){
element.parentNode.Accordion.display(element.index);
});
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

root-master

  • Осваиваюсь на форуме
  • 48
  • 0 / 0
Пробовал так. Обновляю страницу и все пункты раскрыты получаются. Будто либо ошибка какая-то, либо...
Твой вариант работает, если вставить его в модуль аккордиона производителей.
А если вставить его в модуль mod_mainmenu (там тоже подключен аккордион по твоей схеме), то уже не работает.

Т.е на странице у нас два события добавлены.
Первый - это обычное меню ( из которого по клику нужно раскрыть определенные пункты в модуле меню производителей ) :
html\mod_mainmenu\default.php

Код
window.addEvent('domready', function(){
 
$$($('menu_moto_site'), $('menu_moto_site').getElements('ul')).each(function(el){
accParentItems = el.getChildren().filterByClass('parent');
accTogglers = [];
accElements = [];
accParentItems.each(function(element, index){
accTogglers.push(new Element('span').injectTop(element));
accElements.push(element.getElementsByTagName('ul')[0]);
element.index = index;
alert(1);
element.addEvent('click', function(e){
alert(1);
$$('accordion .default').each(function(element, index){
element.parentNode.Accordion.display(element.index);
});
});
element.addEvent('mouseover', function(){
if (this.getChildren().filterByTag('ul')[0].offsetHeight == 0) {
accTimer = this.parentNode.Accordion.display.delay(200, this.parentNode.Accordion, $(this).index);
}
});
element.addEvent('mouseout', function(){
if((accTimer != undefined)){clearTimeout(accTimer)};
});
 
});
if ( accParentItems.length > 0 ){
el.Accordion = new Accordion(accTogglers, accElements, {
opacity: false,
alwaysHide: true,
show: $$(accParentItems).indexOf($$(accParentItems).filterByClass('active')[0]),
duration: 200,
transition: Fx.Transitions.Quart.easeOut,
onActive: function(toggler, element){
element.parentNode.parentNode.setStyle('height', 'auto');
},
onBackground: function(toggler, element){
element.parentNode.parentNode.setStyle('height', 'auto');
element.setStyle('height', element.offsetHeight+'px');
}
}
);
}
});
$$('.default').each(function(element, index){
element.parentNode.Accordion.display(element.index);
});
});

То есть добавляя сюда - пункты получается - в развернутом виде все.

И вот второй модуль меню, аккордион производителей (в котором, собственно, содеражатся те пункты, которые необходимо раскрыть):
html\mod_virtuemart_categories\accordion_assets.php

Код
window.addEvent('domready', function(){

$$($('accordion'), $('accordion').getElements('ul')).each(function(el){
accParentItems = el.getChildren().filterByClass('parent');
accTogglers = [];
accElements = [];

accParentItems.each(function(element, index){

accTogglers.push(new Element('span').injectTop(element));
accElements.push(element.getElementsByTagName('ul')[0]);
element.index = index;
element.addEvent('mouseover', function(){
if (this.getChildren().filterByTag('ul')[0].offsetHeight == 0) {
accTimer = this.parentNode.Accordion.display.delay(250, this.parentNode.Accordion, $(this).index);
}
});
element.addEvent('mouseout', function(){
if (window.accTimer) { clearTimeout(window.accTimer) };
});

});
if ( accParentItems.length > 0 ){
el.Accordion = new Accordion(accTogglers, accElements, {
opacity: false,
alwaysHide: true,
show: $$(accParentItems).indexOf($$(accParentItems).filterByClass('active')[0]),
duration: 250,
transition: Fx.Transitions.Quart.easeOut,
onActive: function(toggler, element){
element.parentNode.parentNode.setStyle('height', 'auto');
element.parentNode.addClass('expanded');
},
onBackground: function(toggler, element){
element.parentNode.parentNode.setStyle('height', 'auto');
element.setStyle('height', element.offsetHeight+'px');
element.parentNode.removeClass('expanded');
}
}
);
}
});
});

То есть если сюда добавлять твой код, то работает нормально.
« Последнее редактирование: 25.10.2010, 00:15:32 от root-master »
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
$$('accordion .default') заменить на $$('#accordion .default')
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

root-master

  • Осваиваюсь на форуме
  • 48
  • 0 / 0
Не в этом проблема. Можно даже это событие клика исключить из кода (потому что он туда даже не заходит).
Проблема в том, что объект accordion не существует, когда мы перебираем элементы меню.
Ну вот например твой вариант:

Код: php
				$$('.default').each(function(element, index){
element.parentNode.Accordion.display(element.index);
});

Если вывести alert(element.parentNode.Accordion), то покажет none.
А если пробовать в этом файле (html\mod_virtuemart_categories\accordion_assets.php) пробегаться по элементам , то объект существует.

Данил, понятно показал проблему?
В чем может быть причина?
« Последнее редактирование: 25.10.2010, 01:02:40 от root-master »
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
да чет не пойму. Поставь FireBug если до сих пор еще не поставил. И вместо alert'ов юзай console.log(). Выполняй скрипт пошагово ну и все такое. Может щас дам тупой совет, но лучше переименуй element в ченить другое, хотя это получается как локальная переменная, она перекрывает ту что снаружи...
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

root-master

  • Осваиваюсь на форуме
  • 48
  • 0 / 0
Я думаю, что причина в том, что объект существует в рамках window.addEvent('domready', function(){});

Если решений в этом случае нету, то может быть какие-то есть другие альтернативы.
Я вот сейчас попробовал вариант:
JRequest::setVar('category_id', 4);

На момент, когда идет выбор какого-л из пунктов обычного меню (mod_mainmenu).

В этом случае работает как надо, но(!), учитывая, что я исключил возможность кольцевых ссылок на сайте, то получается, что на странице два активных пункта меню (тот, что выбран в mod_mainmenu и тот, что я установил для пункта меню с каталогом) и это не совсем правильно.
*

root-master

  • Осваиваюсь на форуме
  • 48
  • 0 / 0
Цитировать
Поставь FireBug
стоит и отлаживаю уже не один час..

Цитировать
но лучше переименуй element
ща попробую...
*

root-master

  • Осваиваюсь на форуме
  • 48
  • 0 / 0
Не, так тоже не пашет:

Код: php
$$('.default').each(function(mrElement, index){
mrElement.parentNode.Accordion.display(mrElement.index);
});
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
При всем при этом  не возникает ошибок? $$('.default') возвращает нужный нам массив, или пустой? Посмотри на mrElement.parentNode в DOM'е - у него обязано быть свойство Accordion.
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

root-master

  • Осваиваюсь на форуме
  • 48
  • 0 / 0
Ща сек

Анализировал во вкладке DOM, вроде бы в аттрибутах существует accordion. Но тот ли это аккордион...

this.attributes
  id = "accordion"

Вот скрины:




Т.е ошибка все равно та же..
« Последнее редактирование: 25.10.2010, 01:44:27 от root-master »
*

root-master

  • Осваиваюсь на форуме
  • 48
  • 0 / 0
Вот собственно само свойство, которое и должно быть:



Но оно появляется, если этот код:
Код: php
$$('.default').each(function(mrElement, index){
mrElement.parentNode.Accordion.display(mrElement.index);
});
прописывать непосредственно в том window.addevent(), где и происходит создание объекта Accordion
(html\mod_virtuemart_categories\accordion_assets.php).
*

root-master

  • Осваиваюсь на форуме
  • 48
  • 0 / 0
Данил, вот посмотри пример, может я чего-то не допонимаю, оставил только самое необходимое на странице:

Код: php
<!DOCTYPE HTML 	PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru-ru" lang="ru-ru">

<head>
  
  <title>Site</title>

  <script type="text/javascript" src="js/mootools.js"></script>

  <script type="text/javascript">

window.addEvent('domready', function(){

$$($('menu1'), $('menu1').getElements('ul')).each(function(el){
accParentItems = el.getChildren().filterByClass('parent');
accTogglers = [];
accElements = [];
accParentItems.each(function(element, index){
accTogglers.push(new Element('span').injectTop(element));
accElements.push(element.getElementsByTagName('ul')[0]);
element.index = index;
element.addEvent('mouseover', function(){
if (this.getChildren().filterByTag('ul')[0].offsetHeight == 0) {
accTimer = this.parentNode.Accordion.display.delay(200, this.parentNode.Accordion, $(this).index);
}
});
element.addEvent('mouseout', function(){
if((accTimer != undefined)){clearTimeout(accTimer)};
});
 
});
if ( accParentItems.length > 0 ){
el.Accordion = new Accordion(accTogglers, accElements, {
opacity: false,
alwaysHide: true,
show: $$(accParentItems).indexOf($$(accParentItems).filterByClass('active')[0]),
duration: 200,
transition: Fx.Transitions.Quart.easeOut,
onActive: function(toggler, element){
element.parentNode.parentNode.setStyle('height', 'auto');
},
onBackground: function(toggler, element){
element.parentNode.parentNode.setStyle('height', 'auto');
element.setStyle('height', element.offsetHeight+'px');
}
}
);
}
});

if($('menu2')) {
         $$('.default').each(function(mrElement, index){
mrElement.parentNode.Accordion.display(mrElement.index);
});
    }


});


window.addEvent('domready', function(){

$$($('menu2'), $('menu2').getElements('ul')).each(function(el){
accParentItems = el.getChildren().filterByClass('parent');
accTogglers = [];
accElements = [];

accParentItems.each(function(element, index){

accTogglers.push(new Element('span').injectTop(element));
accElements.push(element.getElementsByTagName('ul')[0]);
element.index = index;
element.addEvent('mouseover', function(){
if (this.getChildren().filterByTag('ul')[0].offsetHeight == 0) {
accTimer = this.parentNode.Accordion.display.delay(250, this.parentNode.Accordion, $(this).index);
}
});
element.addEvent('mouseout', function(){
if (window.accTimer) { clearTimeout(window.accTimer) };
});

});
if ( accParentItems.length > 0 ){
el.Accordion = new Accordion(accTogglers, accElements, {
opacity: false,
alwaysHide: true,
show: $$(accParentItems).indexOf($$(accParentItems).filterByClass('active')[0]),
duration: 250,
transition: Fx.Transitions.Quart.easeOut,
onActive: function(toggler, element){
element.parentNode.parentNode.setStyle('height', 'auto');
element.parentNode.addClass('expanded');
},
onBackground: function(toggler, element){
element.parentNode.parentNode.setStyle('height', 'auto');
element.setStyle('height', element.offsetHeight+'px');
element.parentNode.removeClass('expanded');
}
}
);
}
});

});

  </script>

</head>

<body>
<div class="navigation">
<!--MENU1-->
<ul class="menu" id="menu1"><li id="current" class="item1"><span class="active">Main</span></li></ul>
<!--MENU2-->
<ul class="menu" id="menu2">
<li class="parent default">
<a href="/bikes-on-earth">Bykes on earth</a>

<ul>
<li class="parent default">
<a href="/bykes-on-earth/scooter">Scooter</a>
<ul>
<li class=" item6">
<a href="/bikes-on-earth/scooter/honda">Honda</a>
</li>
<li class=" item5">

<a href="/мото-на-земле/скутеры/orion">Orion</a>
</li>
<li class=" item2">
<a href="/мото-на-земле/скутеры/stels">Stels</a>
</li>
</ul>
</li>
<li class="parent">

<a href="/мото-на-земле/мотоциклы">Motobyke</a>
<ul>
<li class=" item7">
<a href="/мото-на-земле/мотоциклы/kawasaki">Kawasaki</a>
</li>
</ul>
</li>
<li>

<a href="/мото-на-земле/квадроциклы">ATVs</a>
</li>
<li>
<a href="/мото-на-земле/мотовездеходы">ATV</a>
</li>
<li>
<a href="/мото-на-земле/багги">Buggy</a>

</li>
<li>
<a href="/мото-на-земле/снегоходы">Snowmobiling</a>
</li>
</ul>
</li>
<li class="parent">
<a href="/мото-на-воде">Beauty on the water</a>

<ul>
<li>
<a href="/мото-на-воде/гидроциклы">Watercraft</a>
</li>
<li>
<a href="/мото-на-воде/катера">Boats1</a>
</li>
<li>

<a href="/мото-на-воде/лодки">Boats2</a>
</li>
<li>
<a href="/мото-на-воде/моторы">Motors</a>
</li>
</ul>
</li>
<li class="parent">

<a href="/дополнительно-к-мото">In addition to motor</a>
<ul>
<li>
<a href="/дополнительно-к-мото/экипировка">Equipment</a>
</li>
<li>
<a href="/дополнительно-к-мото/аксессуары">Accessories</a>

</li>
<li>
<a href="/дополнительно-к-мото/запчасти">Repair parts</a>
</li>
</ul>
</li>
</ul>
</div>

</body>

</html>

Версия mootools 1.12.

Опишу еще раз вкратце проблему.
На сайте есть несколько window.addEvent('domready'), т.е два меню с типом Accordion. Назовем их условно (menu1 и menu2). Задача состоит в том, чтобы по клику одного из пунктов menu1 разворачивались определенные пункты в menu2.

Конкретные пункты, которые мне необходимо раскрыть в menu2, имеют класс .default. Для разворачивания меню пробую использовать метод display у аккордиона.

Проблема заключается в том, что я не могу получить объект Accordion у пунктов (с классом default, menu2), которые необходимо раскрыть. FireBug в консоле пишет: "mrElement.parentNode.Accordion is undefined". Возможно получается так, что объекты типа Accordion в menu2 не успевают создаться.

Какие попытки я принимал:

$$('.default').each(function(mrElement, index){
    mrElement.parentNode.Accordion.display(mrElement.index);
});

mrElement.parentNode.Accordion - т.е свойства аккордион не существует.
пробовал ставить условие:

if($('menu2')) {
   mrElement.parentNode.Accordion.display(mrElement.index);
}

Тоже не выходит.
« Последнее редактирование: 25.10.2010, 17:46:00 от root-master »
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
Ну тут конечно, беглым взглядом видно что ты обращаешся к Accordion, который еще не создан. Если тебе надо по клику раскрывать - так и пиши:
Код: javascript
if($('menu2')) {
$$('#menu1 span').addEvent('click', function() {
$$('.default').each(function(element, index){
element.parentNode.Accordion.display(element.index);
});
});
}
Тогда к моменту клика Accordion уже будет создан.
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

root-master

  • Осваиваюсь на форуме
  • 48
  • 0 / 0
Блин, зашибись!)
Дак, а как сделать это раскрытие в момент, когда страница загружена?
Мы произвели клик, он раскрыл нужный пункт, страница пошла грузиться по ссылке, загрузилась и по умолчанию все пункты опять свернулись.
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
оформи функцию раскрытия default пунктов как отдельная именованая функция. И вызывай ее как при кликах так и при domready(только вызов должен идти ниже кода, который зааккордионивает #menu2, что вобщемто понятно)
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

root-master

  • Осваиваюсь на форуме
  • 48
  • 0 / 0
Вообще, даже не знаю, как правильно сделать. Суть в том, что надо держать раскрытым определенные пункты меню (я их пометил классом default в стилях), когда у нас активен какой-л из пунктов не меню каталогов, а меню обычного (контакты, FAQ и прочие).
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
Ну так надо эту логику(зависимость от текущего актвного пункта) перенести в php, и метить нужные пункты каталога если не .active , то .default, но тогда в параметр show: надо писать чета типа:
Код: javascript
$$(accParentItems).indexOf($$(accParentItems).filterByClass('active')[0]) || $$(accParentItems).indexOf($$(accParentItems).filterByClass('default')[0])
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

root-master

  • Осваиваюсь на форуме
  • 48
  • 0 / 0
Код
$$(accParentItems).indexOf($$(accParentItems).filterByClass('active')[0]) || $$(accParentItems).indexOf($$(accParentItems).filterByClass('default')[0])

не работает оператор || в параметре show.

В общем, оставлю пока так:

Код
					if ($$(accParentItems).indexOf($$(accParentItems).filterByClass('active')[0])!= -1) 
var paramShow = $$(accParentItems).indexOf($$(accParentItems).filterByClass('active')[0]);
else
var paramShow = $$(accParentItems).indexOf($$(accParentItems).filterByClass('default')[0]);
« Последнее редактирование: 25.10.2010, 20:01:50 от root-master »
*

root-master

  • Осваиваюсь на форуме
  • 48
  • 0 / 0
Остался еще один неразрешенный вопрос...

Сейчас аккордион работает при наведении курсором на тег UL, я так понимаю..? Можно ли как-то подправить, чтобы эффект наведения работал не на тег Ul, а тег A (ccылки)?

« Последнее редактирование: 25.10.2010, 20:37:37 от root-master »
*

Impulsee

  • Осваиваюсь на форуме
  • 22
  • 2 / 0
поставил Ваш модуль... залил товары...
Положил сервер хостера...
Сайт - 3olushka.com.ua
При включенном модуле нагрузка: 775 запросов к БД
при отключенном 55...
как побороть?
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

IceVmCart - новый бесплатный модуль корзины для VirtueMart

Автор Grig2009

Ответов: 105
Просмотров: 53931
Последний ответ 05.02.2017, 11:44:02
от Super_Panda
Модуль недавно просмотренные товары для VirtueMart 1.1.X

Автор aleks_yug

Ответов: 97
Просмотров: 28033
Последний ответ 25.10.2016, 15:03:07
от Igoritaly
Модуль Cherry Picker for VirtueMart

Автор flintstone

Ответов: 42
Просмотров: 26624
Последний ответ 04.01.2016, 21:25:50
от gleb22
Добавить модуль в товар

Автор Tokyo

Ответов: 2
Просмотров: 2886
Последний ответ 11.05.2015, 20:43:32
от tierex
Усовершенствованный модуль категорий [Аккордион и прочее - the best ;) ]

Автор danik.html

Ответов: 749
Просмотров: 194751
Последний ответ 24.11.2014, 18:37:11
от slavakh