Новости 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 Гость просматривают эту тему.
  • 484 Ответов
  • 183089 Просмотров
*

egvimar

  • Осваиваюсь на форуме
  • 32
  • 0 / 0
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #90 : 10.02.2010, 15:22:09 »
но этот плагин платный, где его можно бесплатно стыреть ;)
*

mansonfaust

  • Захожу иногда
  • 73
  • 0 / 0
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #91 : 16.02.2010, 10:06:38 »
Роутер работает (E-router), но не все ссылки исправляет. Сторонние модули остаются со старыми ссылками, что приводит к дублированию ссылок, а это не есть хорошо для индексации сайта поисковиками.
Подскажите какой код нужно добавить в файл роутера для конвертации ссылок в другом компоненте и второй вопрос - видно остальные ссылки придется править вручную - какой вид должна иметь ссылка, чтобы она захватилась роутером? Все перепробовал - часть ссылок конвертируются, а часть нет - не могу найти общего правила для этого!
*

beagler

  • Moderator
  • 3276
  • 392 / 4
  • https://alorisman.ru/
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #92 : 16.02.2010, 10:09:39 »
посмотрите внимательно код роутера - там всё просто. Ссылки конвертятся для строго определенных значений адрессной строки.
Роутер работает ТОЛЬКО для компонента VirtueMart
*

mansonfaust

  • Захожу иногда
  • 73
  • 0 / 0
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #93 : 16.02.2010, 10:25:39 »
Спасибо за ответ. Но я не силен в программировании и не совсем понимаю. Подскажите пожалуйста для каких значений адрессной строки конвертируется ссылка?
*

beagler

  • Moderator
  • 3276
  • 392 / 4
  • https://alorisman.ru/
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #94 : 16.02.2010, 11:15:47 »
для следующих значений "page="
'shop.browse'
'shop.feed'
'shop.product_details'
'shop.ask'
'checkout.index'
'account.billing'
'account.shipto'
'account.shipping'
'shop.registration'
'shop.recommend'
'shop.tos'
'shop.cart'
'account.index'
'account.order_details'
'shop.waiting_list'
'shop.search'
*

mansonfaust

  • Захожу иногда
  • 73
  • 0 / 0
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #95 : 16.02.2010, 13:50:06 »
тогда странно, ведь другие компоненты используют ссылки на те же страницы, да впрочем все ссылки одинаково строятся с применением VM. Так почему же они отображаются по другому? Вопрос относится именно к VM, поскольку свои же ссылки тоже транслируются не все!
*

beagler

  • Moderator
  • 3276
  • 392 / 4
  • https://alorisman.ru/
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #96 : 16.02.2010, 15:09:47 »
в модулях ссылки должны вызываться через JRoute, тогда джумловский роутер будет их роутить.     Во сказал.

*

mansonfaust

  • Захожу иногда
  • 73
  • 0 / 0
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #97 : 16.02.2010, 16:07:00 »
спасибо, буду пробовать
*

mansonfaust

  • Захожу иногда
  • 73
  • 0 / 0
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #98 : 16.02.2010, 17:48:35 »
а как преобразовать ссылку HTML вида <a href=... и т.д. с php вставками в ссылку вида Jroute ?
*

schel4ok

  • Захожу иногда
  • 219
  • 4 / 1
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #100 : 16.02.2010, 22:12:49 »
сделать наоборот - php co вставками HTML

чё-то я не пойму. в модуле mod_rokvirtuemart_categories как раз php co вставками HTML, но нифига не роутится

[вложение удалено Администратором]
*

schel4ok

  • Захожу иногда
  • 219
  • 4 / 1
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #102 : 16.02.2010, 23:37:55 »
поменял на JRoute::_   -   работает!
спасибо.
я просто глядел в стандартный модуль категорий виртумарта. и не мог найти там нигде JRoute, поэтому не мог понять что и как менять
но стандартный модуль при этом роутится
*

schel4ok

  • Захожу иногда
  • 219
  • 4 / 1
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #103 : 17.02.2010, 11:51:02 »
теперь появилась другая проблема - все ссылки на товары и категории помечены таким HTML warningом
 “<a> escaping malformed URI reference”
A URI contains impermissible characters or quotes around the URI are not closed.

единственно что я нашел необычного в ссылках Виртумарта  -  это русские буквы
<a title="Замки для стеклянных дверей" href="/shop/category/42/Замки-для-стеклянных-дверей.html">

но заменить их из админки нельзя, т.к. псевдонимы для товаров и категорий не предусмотрены
можно как-то в роутере транслит сделать?
*

schel4ok

  • Захожу иногда
  • 219
  • 4 / 1
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #105 : 17.02.2010, 14:21:47 »
может я не то скачал, но я в нём транслита не видел.
ну и то что ссылки выводятся русскими буквами говорит само за себя.
попробовал вставить такую строчку прямо перед возвратом значения функции return $product_name;
   $product_name = iconv("UTF-8", "ISO-8859-1//TRANSLIT", $product_name);

вместо этого получил такие УРЛы http://stendart.net/shop/category/74/?-?-?/?-?-?-?-?.html
хотя все ссылки ведут точно по назначению и кстати варнинги пропали

а где скачать правильный роутер с транслитом?

   
*

schel4ok

  • Захожу иногда
  • 219
  • 4 / 1
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #107 : 17.02.2010, 14:53:06 »
я уже нашел твой роутер, полистав тему
до этого я скачивал тот, что в основном сообщении темы - теперь транслит нормально работает

если удасться транслит сделать функцией iconv("UTF-8", "ISO-8859-1//TRANSLIT", $title);  то будет совсем красиво!
главное правильно кодировку вывода подобрать чтобы не было вопросиков в строке УРЛа


только при нажатии кнопки "Позвоните, чтобы уточнить цену" выводится ошибка -> # Извините, но запрошенный товар не найден!
*

schel4ok

  • Захожу иногда
  • 219
  • 4 / 1
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #109 : 17.02.2010, 15:09:03 »
не знал.
а что делать с кнопкой "Позвоните, чтобы уточнить цену" выводится ошибка -> # Извините, но запрошенный товар не найден!
*

schel4ok

  • Захожу иногда
  • 219
  • 4 / 1
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #114 : 17.02.2010, 21:36:59 »
что-то я не понял смысл этих цифр
ссылка на страницу тут http://stendart.net/shop/category/40/dovodchiki/dovodchiki-verhnego-raspologeniya.html?TreeId=10
*

schel4ok

  • Захожу иногда
  • 219
  • 4 / 1
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #116 : 18.02.2010, 09:24:25 »
а что значит заремить?
*

schel4ok

  • Захожу иногда
  • 219
  • 4 / 1
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #118 : 18.02.2010, 12:33:29 »
ничего не изменилось
вот часть кода, где я закомментировал

         $segments[] =PAGE_PRODUCT_ENQUIRY;   
         
115 //         if(isset($query['category_id']))   {
//            $segments[] = $query['category_id'];
//            unset($query['category_id']);
//         }


      case PAGE_PRODUCT_ENQUIRY:
         $vars['page'] = "shop.ask";
315 //         $vars['category_id'] = $segments[1];
         $vars['product_id'] = $segments[2];
      break;


потом я попробовал закомментировать оба кейса полностью
case 'shop.ask';
...
...
break;


case PAGE_PRODUCT_ENQUIRY:
...
...
break;

появились некоторые изменения - ссылка так и осталась с длинным набором неразборчивых символов, но теперь она ведёт на главную страницу магазина shop.index
*

mansonfaust

  • Захожу иногда
  • 73
  • 0 / 0
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #119 : 18.02.2010, 16:51:31 »
Встроенная навигация в virtuemart  pathway на страницу категорий товаров не работает. на HTML ссылку подправил теперь выглядит так: <a class="pathway" href="<?php echo $item->link='index.php?page=shop.browse&category_id=' .$category_id?>"><?php echo $item->name ?></a>
все в порядке, транслируется, но не подгружается id категории, следовательно ссылка получилась не рабочая. Помогите, что не так в ссылке?
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Перенос с 1.5 на 3.5 + VirtueMart

Автор andrey488

Ответов: 4
Просмотров: 4017
Последний ответ 07.03.2017, 01:19:33
от SeBun
Проблема с установкой VirtueMart 1.1.4

Автор Tell

Ответов: 10
Просмотров: 8434
Последний ответ 02.01.2017, 17:28:01
от pomogu_chem_smogu
Проблемы с установкой VirtueMart

Автор inka

Ответов: 14
Просмотров: 9189
Последний ответ 03.09.2015, 01:44:49
от Amigos
mod VirtueMart latestprod способствовал появлению белого экрана

Автор smogrom

Ответов: 21
Просмотров: 4669
Последний ответ 15.01.2015, 11:50:23
от Schumaker
Русификация VirtueMart. Как ее сделать?

Автор Koriolan

Ответов: 52
Просмотров: 56489
Последний ответ 05.11.2014, 15:37:43
от Jiggy