Новости 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 Ответов
  • 16759 Просмотров
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
Не лезь в shop_browse_queries
Поле mf_desc мы оказывается запросили уже, осталось передать его шаблону:
Код: php
$tpl->set( 'mf_desc', $db->f("mf_desc") );
Это надо вставить в том месте где мы вставляли запрос производителя
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

danik.html

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

mrhuge

  • Захожу иногда
  • 222
  • 7 / 0
  • http://muzalliance.ru/
Текс Даня я чето не то делаю наверное. Вот такой код общий сделал:

Цитировать
    if( $category_id ) {
        /**
        * CATEGORY DESCRIPTION
        */
        $browsepage_lbl = $category_name;
        if ($manufacturer_id) {
            $db->query( "SELECT manufacturer_id, mf_name, mf_desc FROM #__{vm}_manufacturer WHERE manufacturer_id='$manufacturer_id'");
            $db->next_record();
            $browsepage_lbl.= '  '.shopMakeHtmlSafe( $db->f("mf_name") ).'  ';
            $tpl->set( 'mf_desc', $db->f("mf_desc") );
        }

Описание производителя не выводится. А когда через модуль Вирта производители делаю фильтр - выводится описание без добавочных кодов.

Че делать подскажи?
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
нехакнутый вирт может отображать либо производителя либо категорию. Это можно проследить по цепочке условий if ($category_id){...} else if ($manufacturer_id) {..}
Хакнув, мы добавили к заголовку назвнаие производителя, а написав  $tpl->set( 'mf_desc', $db->f("mf_desc") ) сделали доступной в шаблоне вирта переменную $mf_desc. Осталось только вывести ее. ковыряй themes/default/template/browse/includes/какйото_файл.php
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

mrhuge

  • Захожу иногда
  • 222
  • 7 / 0
  • http://muzalliance.ru/
Ну что я могу сказать - только опять "еееее"  ;D

добавил в /components/com_virtuemart/themes/default/templates/browse/includes/browse_header_category.tpl.php
такуб строчку:
<?php echo $mf_desc; ?>

и стало хорошо-хорошо!

Вирт стал уже очень крутой: и ЧПУ быстрый и категории АЯКСом меняются и производители фильтруются. Ну не сказка ли! Всё почти как в настоящих интернет-магазинах ;D

И всё благодаря кому?  :o
*

root-master

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

Вот что добавляется при формировании меню. Эта строчка, собственно, и портит всё.

Например, Скутеры:
<ul style="padding-top: 0px; border-top: medium none; padding-bottom: 0px; border-bottom: medium none; overflow: hidden; height: 180px;">

В данном случае, мне надо как-то скорректировать вот эти параметры. В частности, padding-top. Но если мы его меняем (значение) на фиксированную величину, то развернуть этот пункт "мото на земле" уже не сможем (height становится автоматически height: 0px). Возвращаю значение к 0px у padding-top и все работает.

Дело в том, что все необходимые стили с отступами для каждого уровня меню расписаны, а вот то, что генерится, просто портит всё. Я так понимаю, высота автоматически рассчитывается в зависимости от количества пунктов меню, и при изменении отступа, происходит ошибка, наверно..? Высота, видимо, где-то в mootools рассчитывается? Где и как можно было бы поправить этот момент? Уже измотался весь, не знаю где поправить. Может можно было бы как-то через тот же asset подкорректировать отступ, но не силен в работе с mootools.

Прилагаю два скрина.
menu1.gif - то как есть сейчас, menu2.gif - то как нужно получить в итоге.

MENU1.GIF


MENU2.GIF


*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
Да, паддинг обнуляется. Делается это в модуле accordion.js мутулза, ковыряться там не стал. Проблему не замечал потому как юзаю всегда margin а не padding.
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

root-master

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

root-master

  • Осваиваюсь на форуме
  • 48
  • 0 / 0
Цитировать
Проблему не замечал потому как юзаю всегда margin а не padding.
Надо бы это даже в заголовок темы вынести. Действительно, padding и margin взаимозаменяемы в стилях тега UL. Почему-то мне это в голову сразу не пришло попробывать. Спасибо за помощь.
*

stslit

  • Осваиваюсь на форуме
  • 15
  • 0 / 0
Доброго всем дня.
Уважаемые гуру по VirtueMart подскажите. В настройках есть "Производители" и "Категории производителей", как вывести оба выпадающих списка в корень каталога? Для формировалась сортировка отображаемых товаров согласно выбранным в списках "производителям" и "категориям".
P.S.
Возможно проблема не новая, может есть у кого ссылки.
*

danik.html

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

stslit

  • Осваиваюсь на форуме
  • 15
  • 0 / 0
2 danik.html Может я изобретаю велосипед?
В результате хочется получить каталог, т.е.
Есть "Категория производителей" например "WauxHall"
Далее "Производитель" - "Antara(1998-2004)".
А в каталоге только:
Двигатель
Управление двигателем   
Сцепление и трансмиссия   
и прочее.

Т.е в каталоге только 10 разделов, которые сортируются по выше указанным характеристикам.
А производителей и марок очень много и они только добавляются.
Нашел такой модуль, но похоже не то http://www.givemeajobsoicanmovetocanada.co.uk/joomla/installing-using-my-virtuemart-manufacturers-logos-module

Может подскажете, куда копать, может есть готовое решение?
*

root-master

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

У меня такой вопрос, может быть не стандартный. Требуется убрать кольцевые ссылки, т.е ссылки, ведущие сами на себя.
Например, мы находимся на странице с каталогом "Аксессуары", соответственно, не должно быть ссылки на этот каталог.
Где этот момент можно поправить? Наверно, где-то в самом модуле?
И вообще, этот момент нестандартный или это как-то настраивается? Я имею в виду, например, стандартный модуль меню для Joomla. Потому что я никогда об этом не задумывался и вроде бы всегда были ссылки кольцевыми, а сейчас стоит вот такая задача.
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
Делается это легко:
в case 'li' там где
Код: php
					$node->addAttribute('class', $node->attributes('class').' current');
Добавляем
Код: php
					$node->setData($node->a[0]->data());
$node->removeChild($node->a[0]);
В любом лэйауте кроме mootree должно сработать
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

root-master

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

А как, допустим, здесь:
$node->setData($node->a[0]->data());
обрамить вывод наименования узла в тег span?

То есть чтобы получилось таким образом:
<li class=" current "><span>Имя узла</span><li>
*

root-master

  • Осваиваюсь на форуме
  • 48
  • 0 / 0
Уже понял.

$span = $node->addChild('span');
$span->setData($node->a[0]->data());
$node->removeChild($node->a[0]);

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

root-master

  • Осваиваюсь на форуме
  • 48
  • 0 / 0
Цитировать
Только непонятно, вот для производителей работает, а для категорий меню почему-то не получается применить данные изменения.
По-моему, надо в helper вносить изменения.
Для производителей, в принципе, подойдет. А вот для элементов, которые стоят выше по уровню в дереве, уже не получается. Данные устанавливаются в порядке очереди.
Таким образом:


И получается, что дочерние элементы, которые содержатся в теге ul находятся выше родительского элемента (родительский элемент ушел вниз после добавления).
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
Да, есть такое дело. Это все из-за ущербности "искуственного" SimpleXML, который нативный есть только в php5. Такчто поступим хитро:
Код: php
					$node->a[0]->_name = 'span';
$node->a[0]->removeAttribute('href');
Да, решение "не православное", так как знак "_" означает приватное свойство, но проблема вынуждает...

j1.6 работает на чистом php5
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

root-master

  • Осваиваюсь на форуме
  • 48
  • 0 / 0
Брависсимо! =)
*

root-master

  • Осваиваюсь на форуме
  • 48
  • 0 / 0
Данил, вопрос еще такой, как сделать по умолчанию активным (раскрытым) пункт меню?
Примерно, так:

гл_пункт1
  дочерний_пункт1
      дочерний_пункт1_1
      дочерний_пункт1_2
      дочерний_пункт1_3
  дочерний_пункт2
  дочерний_пункт3
гл_пункт2
гл_пункт3

То есть при загрузке страницы необходимо, чтобы по умолчанию был раскрыт конкретный пункт меню.
Возможно ли такое сделать? Скорее всего, это как-то в assets надо править, наверно?
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
мм. нераскрытые пункты обрезаются еще в helper'е(чтобы сразу их отбросить и не тратить на них ресурсы). А если у тебя accordion - то думаю запросто.
Ну или попробовать так сделать:
перед

modVMCategoriesHelper::render($params, 'VMCategoriesAccordionDecorator');

установить JRequest::setVar('category_id', нужная_категория), а потом восстановить его(предварительно запомнив, скажем в $real_id. Но так наверно косяки всплывутк какиенибудь..
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

root-master

  • Осваиваюсь на форуме
  • 48
  • 0 / 0
Да, вроде бы работает.
А я несколько иначе начал решать..
Добавил конкретным пунктам меню свойство 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');
}
}
Вот только не получается в assets раскрыть данные пункты меню.
Там вроде бы есть методы nextAll().show(), но не выходит их применить.
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
Это mootools а не jquery ))
Аккордион? Там у каждого ul есть свойство Accordion. У него есть метод display(index). Щас точно не скажу но примерно так:
$$('.default').each(function(element, index){
    element.parentNode.Accordion.display(element); //или так не сканает, может element.index
});

Accordion.display как открывает так и закрывает элемент, имей ввиду...
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

root-master

  • Осваиваюсь на форуме
  • 48
  • 0 / 0
Цитировать
Это mootools а не jquery ))
Уже понял)

Цитировать
или так не сканает, может element.index
element.index - так работает.

Однако достаточно было указать в options при инициализации аккордиона соответствующий параметр show.

Код
show: $$(accParentItems).indexOf($$(accParentItems).filterByClass('default')[0])
« Последнее редактирование: 19.10.2010, 00:48:35 от root-master »
*

root-master

  • Осваиваюсь на форуме
  • 48
  • 0 / 0
Хм. А вот это уже больной вопрос. Как определить, что курсор наведен на тег 'a', а не 'li'?
Можно ли это как-то безболезненно поправить? Может быть как-то можно с помощью CSS это подправить?
« Последнее редактирование: 19.10.2010, 02:05:45 от root-master »
*

stslit

  • Осваиваюсь на форуме
  • 15
  • 0 / 0
2 danik.html
Согласно первого поста решение такое

Цитировать
категория_товаров_A
--производитель_A
--производитель_B
категория_товаров_B
--производитель_A
--производитель_С

А есть возможности у Вашего модуля сделать в таком варианте?:

производитель_А
--модель_А1
----вид_1
----вид_2
----вид_3
--модель_А2
----вид_1
----вид_2
----вид_3
производитель_Б
--модель_Б3
----вид_1
----вид_2
----вид_3
производитель_В
--модель_В1
----вид_1
----вид_2
----вид_3
--модель_В3
----вид_1
----вид_2
----вид_3

где вид_1, вид_2, вид_3 это одно и тоже, только для разный моделей и производителей.
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
2 danik.html
А есть возможности у Вашего модуля сделать в таком варианте?...

Не, врядли...
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

stslit

  • Осваиваюсь на форуме
  • 15
  • 0 / 0
2 danik.html

Грустно. >:(
Приходилось с такой реализацией сталкиваться? Может подскажете что...
 >:( >:( >:(
*

refrizherator

  • Захожу иногда
  • 60
  • 1 / 0
Уважаемый danik.html, вижу вы тут как мессия для всех) В начале поста прочитал проблему моего рода, но потом тему перевели, а решение я так и не увидел. Пршу помощи)

СУТЬ:  Установил 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... или нажав кнопку слудующая...
Кроме плюсика предложить ничо не могу, если знаете, подскажите.
*

root-master

  • Осваиваюсь на форуме
  • 48
  • 0 / 0
refrizherator, у Вас скорее всего версия компонента платная. Сейчас, насколько мне известно, дополнительно подключают плагины, чтобы работал тот или иной функционал, либо приходится допиливать самому.

Вот ссылка на free-версию.
http://extensions.joomla.org/extensions/site-management/sef/1063

Попробуйте поработать с этой версией, может проблемы не будет.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

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