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

diggs

  • Захожу иногда
  • 60
  • 4 / 0
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #151 : 23.03.2010, 13:18:11 »
Жду ответа :)

----
Подумал, а может ли дело быть в том, что я не подключил какие - либо модули в настройках PHP ?
« Последнее редактирование: 23.03.2010, 13:32:43 от diggs »
*

beagler

  • Moderator
  • 3276
  • 392 / 4
  • https://alorisman.ru/
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #152 : 23.03.2010, 14:28:01 »
Только что залил чистые последние Joomla и VirtueMart, залил роутер. Всё нормально.
видимо, у Вас какие-то хаки.
*

diggs

  • Захожу иногда
  • 60
  • 4 / 0
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #153 : 23.03.2010, 14:58:09 »
Может это из - за установленного sh404SEF ? Можно как - то выяснить с чем конфликтует роутер?
*

diggs

  • Захожу иногда
  • 60
  • 4 / 0
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #155 : 23.03.2010, 15:13:58 »
Он стоял, до того момента как я узнал что есть этот роутер. Сейчас удалил sh404SEF, но проблема так же сохранилась..
*

diggs

  • Захожу иногда
  • 60
  • 4 / 0
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #156 : 23.03.2010, 15:31:00 »


Из дополнений ставил: Xmap, CSV Improved, VirtueMart_TP_Extended_Search, swMenuPro.

Из модификаций:
Как спрятать поля с количеством товара для корзины (hide quantity box) http://joomlaforum.ru/index.php/topic,70508.0.html
Как убрать vmchk? http://joomlaforum.ru/index.php/topic,67311.0.html
Категории товара на главной странице Joomla http://joomlaforum.ru/index.php/topic,92573.0.html
Добавляем новое поле в спецификацию товара http://joomlaforum.ru/index.php/topic,36710.0.html
*

beagler

  • Moderator
  • 3276
  • 392 / 4
  • https://alorisman.ru/
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #157 : 23.03.2010, 15:38:16 »
странно, вроде ничего криминального. После того как удалили sh404SEF кэш сервера и браузера почистили?
*

diggs

  • Захожу иногда
  • 60
  • 4 / 0
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #158 : 23.03.2010, 15:53:50 »
Да. По прежнему, всё так же..  :( Может это из за хака "Добавляем новое поле в спецификацию товара" ?
*

diggs

  • Захожу иногда
  • 60
  • 4 / 0
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #160 : 23.03.2010, 17:46:38 »
Notice: Object of class stdClass could not be converted to int in /home/site-name.ru/docs/components/com_virtuemart/router.php  on line 428
« Последнее редактирование: 23.03.2010, 17:50:46 от diggs »
*

diggs

  • Захожу иногда
  • 60
  • 4 / 0
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #162 : 23.03.2010, 18:34:46 »
Нотис убрался, но проблема осталась..  >:( >:(
*

remix8080

  • Захожу иногда
  • 347
  • 39 / 0
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #164 : 23.03.2010, 21:17:57 »
beagler, подскажите, пож-ста, такое...
Использую роутер (из e-router.rar). На главной у меня ВМ (вместе с категориями выводятся и подкатегории). Так вот, когда кликаю по категориям и по подкатегориям, то никакого эффекта нету (т.е. остаюсь на главной странице). Даже видно (при наведении мишью), что генерится ссылка на главную страницу. Но если зайти на товар из, скажем "универсального модуля" (от beliyadm), а потом "полазить" по категориям в pathway-е, то ссылки отображаются как и надо (т.е. красиво :) ).

У меня Joomla 1.5.12, VM 1.1.13

Не в курсе, в чем может быть причина?
*

remix8080

  • Захожу иногда
  • 347
  • 39 / 0
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #166 : 23.03.2010, 22:10:55 »
в главном меню есть ссылка на компонент VirtueMart?
Да, есть.
*

remix8080

  • Захожу иногда
  • 347
  • 39 / 0
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #168 : 23.03.2010, 22:27:18 »
опубликованная?
Да
А эти ссылки с jroute?
Ой, вспомнил, что в самом первом посте было про это
Цитировать
Для того, чтобы роутер заработал в модулях ссылки должна вызываться через JRoute::_(), а не через sefRelToAbs()
А где это можно посмотреть/поменять? :(
*

gishmasters

  • Новичок
  • 5
  • 0 / 0
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #170 : 24.03.2010, 11:24:03 »
beagler Не ответите на мой вопрос? возможно ли изменить отображение product name   на product sku ?  это было бы очень удобно
*

remix8080

  • Захожу иногда
  • 347
  • 39 / 0
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #171 : 24.03.2010, 12:53:13 »
Beagler, я думал, что нужно править формат ссылок в файле categoryChildlist.tpl.php
Т.е. в код
Код
<a title="<?php echo $category["category_name"] ?>" href="<?php $sess->purl(URL."index.php?option=com_virtuemart&amp;page=shop.browse&amp;category_id=".$category["category_id"])?>"> ... </a>
перед index.php вставить JRoute::_ ...  но что-то с синтаксисом не получается :(

Вы говорите, что нужно править shop.index.php, а подскажете что конкретно? (если действительно в нем).
*

gishmasters

  • Новичок
  • 5
  • 0 / 0
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #172 : 24.03.2010, 13:14:50 »
Если заккоментировать следующую строку (//$segments[] = $query['category_id'];)    в разделе (/* Case for product details page */)

то ссылка вместо component/virtuemart/details/1/1/monitori/t220.html
примет вид component/virtuemart/details/1/monitori/t220.html,     тоесть от одной цифры мы избавимся всё же)
впринципе всё работает, кроме страницы  (ЗАДАТЬ ВОПРОС ПО ТОВАРУ)
*

beagler

  • Moderator
  • 3276
  • 392 / 4
  • https://alorisman.ru/
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #173 : 24.03.2010, 16:57:46 »
Вы говорите, что нужно править shop.index.php, а подскажете что конкретно? (если действительно в нем).
Я говорю, что нужно плясать от shop.index.php
*

beagler

  • Moderator
  • 3276
  • 392 / 4
  • https://alorisman.ru/
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #174 : 24.03.2010, 16:59:44 »
Если заккоментировать следующую строку (//$segments[] = $query['category_id'];)    в разделе (/* Case for product details page */)

то ссылка вместо component/virtuemart/details/1/1/monitori/t220.html
примет вид component/virtuemart/details/1/monitori/t220.html,     тоесть от одной цифры мы избавимся всё же)
впринципе всё работает, кроме страницы  (ЗАДАТЬ ВОПРОС ПО ТОВАРУ)
Вы теряете информацию о категории. Если Вам это некритично (один товар не принадлежит нескольким категориям) - наслаждайтесь...
*

gishmasters

  • Новичок
  • 5
  • 0 / 0
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #175 : 24.03.2010, 17:04:34 »
Вы теряете информацию о категории. Если Вам это некритично (один товар не принадлежит нескольким категориям) - наслаждайтесь...
по этому вопросу ясно.  а по поводу SKU?  возможно ли его использовать вместо Product name?
*

beagler

  • Moderator
  • 3276
  • 392 / 4
  • https://alorisman.ru/
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #176 : 24.03.2010, 18:32:52 »
возможно. Замените
Код
function getProductTitle($id){
$db = & JFactory::getDBO();
// gets category name
$query = 'SELECT product_name FROM #__vm_product  ' .
' WHERE product_id = ' . (int) $id;

$db->setQuery($query);
// gets category name of item
$product_name = $db->loadResult();
//$product_name = mb_strtolower($product_name);

//Remove following characters
$special_chars = array('!','@','#','$','%','*','(',')');
foreach($special_chars as $char){
$product_name = str_replace($char,'', $product_name);
}

$product_name = str_replace(' ','-', $product_name);
$product_name = vm_translate(str_replace('  ','-', $product_name));
return $product_name;
}
на
Код
function getProductTitle($id){
$db = & JFactory::getDBO();
// gets category name
$query = 'SELECT product_sku FROM #__vm_product  ' .
' WHERE product_id = ' . (int) $id;

$db->setQuery($query);
// gets category name of item
$product_name = $db->loadResult();
//$product_name = mb_strtolower($product_name);

//Remove following characters
$special_chars = array('!','@','#','$','%','*','(',')');
foreach($special_chars as $char){
$product_name = str_replace($char,'', $product_name);
}

$product_name = str_replace(' ','-', $product_name);
$product_name = vm_translate(str_replace('  ','-', $product_name));
return $product_name;
}
*

sergeys2

  • Осваиваюсь на форуме
  • 47
  • 3 / 0
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #177 : 25.03.2010, 04:12:15 »
так что всё-таки делать с этой проклятой страницей вопроса о цене shop.ask?

может кому пригодится решение: http://joomlaforum.ru/index.php/topic,87400.msg592045.html#msg592045
*

gishmasters

  • Новичок
  • 5
  • 0 / 0
Re: SEF для VirtueMart (Joomla 1.5)
« Ответ #178 : 25.03.2010, 11:19:25 »
beagler Спасибо.
SELECT product_sku FROM #__vm_product
как я понял, только данный парметр изменился. больше ничего не нужно менять? тк дальше везде фигурирует  product name.


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

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

Автор andrey488

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

Автор Tell

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

Автор inka

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

Автор smogrom

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

Автор Koriolan

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