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

red

  • Захожу иногда
  • 124
  • 0 / 0
А где копать, в каком файле?
*

Infosakh

  • Завсегдатай
  • 1257
  • 67 / 0
заходите в карточку товара, где отображаются эти кубики (естественно через админку VM). Отключайте визуальный редактор и смотрите код, там собака зарыта  ^-^
*

red

  • Захожу иногда
  • 124
  • 0 / 0
не понял, как отключить визуальный? использую JCE 154 отключил его в общих настройках, зашел в товар, какой там код может быть, такое же описание товара, только без редактора и html-ем написано, что там может быть подозрительного. мне кажется, надо сделать что-то более серьезное, интуиция подсказывает. отключить редактор и зайти в товар, это слишком просто. какие ещё варианты?
*

Infosakh

  • Завсегдатай
  • 1257
  • 67 / 0
Цитировать
Этот знак выскакивает в виртуемарте на двух товарах, на всех остальных нет. На главной титл длинный, и хоть бы что, все нормально выводиться
Вы определитесь где у Вас проблема, тему создали "Почему в титле страницы вставляется знак �" потом говорите про товары в VM. В названии товара что ли появляется � ?
*

red

  • Захожу иногда
  • 124
  • 0 / 0
Да, в названии. Но не в самом названии, а именно только в титле товара.
*

Infosakh

  • Завсегдатай
  • 1257
  • 67 / 0
ну тогда скорее всего дело в sh404SEF, гляньте настройку его, вкладка Основная конфигурация, список заменяемых символов: (хотя причем тут это, у Вас же � появляется не в ссылке на карточку товара, а в названии товара)
З.Ы. А какой модуль используете для вывода товара? это в browes или в product_details отображается � ?
*

red

  • Захожу иногда
  • 124
  • 0 / 0
Список вот такой
Цитировать
Г?|A, Г‚|A, Д‚|A, Г„|A, Д†|C, Г‡|C, ДЊ|C, ДЋ|D, Д?|D, Г‰|E, Д?|E, Г‹|E, Дљ|E, ГЌ|I, ГЋ|I, Д№|L, Е?|N, Е‡|N, Г“|O, Г”|O, Е?|O, Г–|O, Е”|R, Е?|R, Е |S, Ељ|O, Е¤|T, Е®|U, Гљ|U, Е°|U, Гњ|U, Гќ|Y, ЕЅ|Z, Е№,Z, ГЎ|a, Гў|a, Д?|a, Г¤|a, Д‡|c, Г§|c, ДЌ|c, ДЏ|d, Д‘|d, Г©|e, Д™|e, Г«|e, Д›|e, Г­|i, Г®|i, Дє|l, Е„|n, Е?|n, Гі|o, Гґ|o, Е‘|o, Г¶|o, ЕЎ|s, Е›|s, Е™|r, Е•|r, ЕҐ|t, ЕЇ|u, Гє|u, Е±|u, Гј|u, ГЅ|y, Еѕ|z, Еє|z, Л™|-, Гџ|ss, Д„|A, Вµ|u, Ґ|G, Ё|YO, Є|E, Ї|YI, І|I, і|i, ґ|g, ё|yo, №|#, є|e, ї|yi, А|A, Б|B, В|V, Г|G, Д|D, Е|E, Ж|ZH, З|Z, И|I, Й|Y, К|K, Л|L, М|M, Н|N, О|O, П|P, Р|R, С|S, Т|T, У|U, Ф|F, Х|H, Ц|TS, Ч|CH, Ш|SH, Щ|SCH, Ъ|ne, Ы|YI, Ь|, Э|E, Ю|YU, Я|YA, а|a, б|b, в|v, г|g, д|d, е|e, ж|zh, з|z, и|i, й|j, к|k, л|l, м|m, н|n, о|o, п|p, р|r, с|s, т|t, у|u, ф|f, х|h, ц|ts, ч|ch, ш|sh, щ|sch, ъ|nne, ы|y, ь|, э|e, ю|yu, я|ya
По поводу вывода, вроде бы product_details
*

Infosakh

  • Завсегдатай
  • 1257
  • 67 / 0
а скрин можете выложить с этой проблемой?
*

red

  • Захожу иногда
  • 124
  • 0 / 0
Вот 2 скрина, на первых двух со знаком, на третьем без, хотя я не сказал бы,что на третьем товаре, заголовок короче, чем на первых двух
« Последнее редактирование: 04.09.2010, 20:47:43 от red »
*

Infosakh

  • Завсегдатай
  • 1257
  • 67 / 0
тут ЧУП вообще не причем! У меня всё название товара в титуле пишется, а тут судя по скринам до 40 символов. Попробуйте другим браузером открыть ссылку.
« Последнее редактирование: 12.08.2010, 12:07:19 от Infosakh »
*

red

  • Захожу иногда
  • 124
  • 0 / 0
У меня в одном и во втором браузере с такими кракозябрами. В индекс яндекса тоже попало с этими кракозябрами. Вы точно зашли, в тот товар, что на скрину? Есть ли какие-то варианты решения проблемы?
*

Infosakh

  • Завсегдатай
  • 1257
  • 67 / 0
я вообще не могу зайти на Ваш сайт, местный хостинг? З.Ы, Я имел ввиду у меня пишется всё название на моём сайте
*

red

  • Захожу иногда
  • 124
  • 0 / 0
хостинг nic.ru, говорю же он какой-то странноватый, иногда на нем не все корректно работает. гостевая вообще не пашет
вот адрес товара у которого глюки
« Последнее редактирование: 18.09.2010, 09:17:14 от red »
*

Infosakh

  • Завсегдатай
  • 1257
  • 67 / 0
В файле ..../administrator/components/com_virtuemart/html/shop.product_details.php
в строке
$vm_mainframe->setPageTitle( html_entity_decode( substr($product_name, 0, 60 ), ENT_QUOTES ));
поставить вместо 60 побольше
З.Ы. У Вас походу там 36 стоит что ли
*

red

  • Захожу иногда
  • 124
  • 0 / 0
В этом файле только вот такой код указан
Код
$vm_mainframe->setPageTitle( html_entity_decode( $page_title, ENT_QUOTES, vmGetCharset() ));

А вот как раз над ним, написан mb_substr о котором говорилось выше, там вот такое
Код
// Set Dynamic Page Title
if( function_exists('mb_substr')) {
$page_title = mb_substr($product_name, 0, 64, vmGetCharset() );
} else {
$page_title = substr($product_name, 0, 64 );

}
Может в нем что-то изменить нужно?



С 64, сделал 164 — ничего не не изменилось.
« Последнее редактирование: 12.08.2010, 18:21:50 от red »
*

Lex

  • Завсегдатай
  • 1615
  • 274 / 1
Вариантов собственно 3 ИМХО
1. В PHP нет модуля mbstring, что для хостинга было бы в высшей степени странно.
Проверка:
строку
Код: php
} else {
$page_title = substr($product_name, 0, 64 );
заменить на
Код: php
} else {
$page_title = mb_substr($product_name, 0, 64, vmGetCharset() );
Если будет в результате белый лист - модуля нет и вопросы к хостеру. Если конечно других ошибок в коде не наделаете ^-^
2. vmGetCharset() дает не 'utf-8'.
Проверка
Вывести и посмотреть
echo vmGetCharset();
или
Код: php
if( function_exists('mb_substr')) {
$page_title = mb_substr($product_name, 0, 64, vmGetCharset() );
заменить на
Код: php
if( function_exists('mb_substr')) {
$page_title = mb_substr($product_name, 0, 64, 'utf-8' );
3. title выводятся не этим файлом и даже не этим компонентом, а чем то еще. Тут уж хз.
Жизнь заставила учиться.
В личке на вопросы не отвечаю.
*

red

  • Захожу иногда
  • 124
  • 0 / 0
1. Точно белый лист.
2. Не заметил, чтобы что-то изменилось, но походу тоже что и первый пункт.
3. хз
Какие ещё есть варианты решения?
*

Lex

  • Завсегдатай
  • 1615
  • 274 / 1
4.
Код: php
$page_title = substr($product_name, 0, 64 );
заменить на
Код: php
$page_title = JString::substr($product_name, 0, 64 );
Жизнь заставила учиться.
В личке на вопросы не отвечаю.
*

red

  • Захожу иногда
  • 124
  • 0 / 0
4.
Код: php
$page_title = substr($product_name, 0, 64 );
заменить на
Код: php
$page_title = JString::substr($product_name, 0, 64 );
Ура-а-а действительно помогло! Теперь все отлично работает! *DRINK* *DRINK* Ты мастер! ;)
*

Doc

  • Захожу иногда
  • 456
  • 17 / 0
нет вы заблуждаетесь все совсем не так :)
вот статья написана с выходом 1.5.9, как это вылечить, в FAQ есть аналогичный разбор полетов
Тоже в архиве была проблема, по написанной статье не чего не помогло
Решил методом тыка
В этой строчке introtext), 0, 255); ?>...
Число 255, заменил на 1200 и все заработало, пропали эти � значки
Может кому пригодиться это решение
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Почему статья не отображается

Автор bazabaza

Ответов: 8
Просмотров: 7163
Последний ответ 14.05.2025, 10:52:43
от antivampoed
php скрипт для вызова url адреса открытой страницы

Автор bigrash

Ответов: 10
Просмотров: 6591
Последний ответ 17.02.2024, 20:12:05
от Vastriet
Вместо некоторых разделов стали отображаться пустые страницы

Автор ch

Ответов: 0
Просмотров: 1204
Последний ответ 04.12.2020, 15:07:27
от ch
Страницы не прогружаются до конца

Автор HeroYukki

Ответов: 0
Просмотров: 1305
Последний ответ 11.09.2018, 21:12:00
от HeroYukki
Позволить вставлять знак подчёркивания в alias

Автор archer1981

Ответов: 9
Просмотров: 3250
Последний ответ 22.03.2018, 06:59:29
от kungurskiy