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

intcorp

  • Захожу иногда
  • 456
  • 12 / 0
Есть желание поменять в картинке товара надпись под картинкой "увеличить изображение" на название картинки.
В файле components/com_jshopping/templates/default_div/product/product_default.php
поменял
Код
<a class="lightbox" id="main_image_full_<?php print $image->image_id?>" href="<?php print $this->image_product_path?>/<?php print $image->image_full;?>" <?php if ($k!=0){?>style="display:none"<?php }?>>
                <img id = "main_image_<?php print $image->image_id?>" src = "<?php print $this->image_product_path?>/<?php print $image->image_name;?>" alt="<?php print htmlspecialchars($image->_title)?>" title="<?php print htmlspecialchars($image->_title)?>" />
                <div class="text_zoom">
                    <img src="<?php print $this->path_to_image?>search.png" alt="zoom" /> <?php print _JSHOP_ZOOM_IMAGE?>
                </div>
            </a>
на
Код
<a class="lightbox<?php if ($k!=0){?> no_display<?php }?>" id="main_image_full_<?php print $image->image_id?>" href="<?php print $this->image_product_path?>/<?php print $image->image_full;?>" >
                <img style="margin:0 0 10px 0;" id = "main_image_<?php print $image->image_id?>" src = "<?php print $this->image_product_path?>/<?php print $image->image_name;?>" alt="<?php print htmlspecialchars($image->_title)?>" title="<?php print htmlspecialchars($image->_title)?>" /></a>
            <a class="lightbox<?php if ($k!=0){?> no_display<?php }?>" id="img_descr" href="<?php print $this->image_product_path?>/<?php print $image->image_full;?>" ><?php print htmlspecialchars($this->product->name)?></a>
Часть задачи решена, но если у товара есть дополнительные изображения + аттрибуты со своими картинками, то название не подгружается, либо выводится надпись "увеличить изображение". Где меняется нашел
components/com_jshopping/js/functions.js
Код
html_zoom_img = ' <div class="text_zoom"><img alt="zoom" src="'+liveimgpath+'/search.png" /> '+translate_zoom_image+'</div>';
и
html_middle_img+='<a class="lightbox" id="main_image_full_'+j+'" href="'+liveproductimgpath+'/full_'+json.images[j]+'" '+tmp+'><img id="main_image_'+j+'" src="'+liveproductimgpath+'/'+json.images[j]+'" />'+html_zoom_img+'</a>';
Но прописать не получается.
« Последнее редактирование: 27.10.2013, 19:01:50 от intcorp »
*

nevigen

  • Moderator
  • 10449
  • 863 / 25
  • http://n*****n.com
Профессиональные / Бесплатные решения для JoomShopping
Не лечи бесплатно, ибо тот, кто лечится бесплатно, рано или поздно перестает ценить свое здоровье,
а тот, кто лечит бесплатно, рано или поздно перестает ценить результаты своего труда/ (с) Гиппократ?
Не ищите ответов, ищите решение !
*

intcorp

  • Захожу иногда
  • 456
  • 12 / 0
*

nevigen

  • Moderator
  • 10449
  • 863 / 25
  • http://n*****n.com
:) но комментс
Профессиональные / Бесплатные решения для JoomShopping
Не лечи бесплатно, ибо тот, кто лечится бесплатно, рано или поздно перестает ценить свое здоровье,
а тот, кто лечит бесплатно, рано или поздно перестает ценить результаты своего труда/ (с) Гиппократ?
Не ищите ответов, ищите решение !
*

ELLE

  • Глобальный модератор
  • 4506
  • 893 / 0
*

intcorp

  • Захожу иногда
  • 456
  • 12 / 0
translate_zoom_image формируется в load.js.php
О, супер! Спасибо :)
*

ELLE

  • Глобальный модератор
  • 4506
  • 893 / 0
да не за что ;) ctrl+u и дальше поиск, там все видно что есть
*

intcorp

  • Захожу иногда
  • 456
  • 12 / 0
Еще момент обнаружился
В названии картинки получается вывести название товара <?php print htmlspecialchars($this->product->name)?>, но название картинки <?php print htmlspecialchars($image->_title)?> не выводится. Оказалось, что код <?php print htmlspecialchars($image->_title)?>  работает в карточке товара с 1 картинкой и не работает, если у товара есть еще картинки. Если посмотреть, в товаре с несколькими изображениями, то у картинок значения alt="" title="" пустые.
На всякий случай, версия шопа 3.15
*

ELLE

  • Глобальный модератор
  • 4506
  • 893 / 0
*

intcorp

  • Захожу иногда
  • 456
  • 12 / 0
ДА, блок имеет такое обрамление
Код
<?php foreach($this->images as $k=>$image){?>
            <a class="lightbox<?php if ($k!=0){?> no_display<?php }?>" id="main_image_full_<?php print $image->image_id?>" href="<?php print $this->image_product_path?>/<?php print $image->image_full;?>" >
                <img id = "main_image_<?php print $image->image_id?>" src = "<?php print $this->image_product_path?>/<?php print $image->image_name;?>" alt="<?php print htmlspecialchars($image->_title)?>" title="<?php print htmlspecialchars($image->_title)?>" />
            <div class="text_zoom"><span class="img_descr"><?php print htmlspecialchars($image->_title)?></span></div></a>

<?php }?>
но названия картинок не выводятся
*

ELLE

  • Глобальный модератор
  • 4506
  • 893 / 0
Если у товара несколько обычных картинок - то все должно работать. У себя проверила - есть
Быть может сейчас уже речь про картинки те что вы к атрибутам задаете?

в таком случае foreach нужен для
var translate_zoom_image =

но я не ручаюсь что сработает
« Последнее редактирование: 28.10.2013, 02:19:43 от ELLE »
*

intcorp

  • Захожу иногда
  • 456
  • 12 / 0
Если у товара несколько обычных картинок - то все должно работать. У себя проверила - есть
Быть может сейчас уже речь про картинки те что вы к атрибутам задаете?

в таком случае foreach нужен для
var translate_zoom_image =

но я не ручаюсь что сработает
Да, это в товарах с атрибутами. В товаре без атрибутов все ок.
Код
Код
var translate_zoom_image = "<?php foreach($this->images as $k=>$image){?><?php print htmlspecialchars($image->_title)?><?php }?>";
не прошел.
*

intcorp

  • Захожу иногда
  • 456
  • 12 / 0
В версии 3.16.0 вопрос для картинок атрибутов не решен.
*

nevigen

  • Moderator
  • 10449
  • 863 / 25
  • http://n*****n.com
все там поправлено. решать вместо вас никто не будет.
предоставлена возможность выведено формирование из под фанкшион.
теперь это вопрос шаблона правьте как вам надо шаблон. а не хакайте.
Профессиональные / Бесплатные решения для JoomShopping
Не лечи бесплатно, ибо тот, кто лечится бесплатно, рано или поздно перестает ценить свое здоровье,
а тот, кто лечит бесплатно, рано или поздно перестает ценить результаты своего труда/ (с) Гиппократ?
Не ищите ответов, ищите решение !
*

intcorp

  • Захожу иногда
  • 456
  • 12 / 0
Функция вывода названия картинки у атрибутов
Код
<?php print htmlspecialchars($image->_title)?>
Как не работала, так и не работает. Алт и тайтл у картинок выводится пустой.
*

nevigen

  • Moderator
  • 10449
  • 863 / 25
  • http://n*****n.com
Вы знаете вот один из немногих случаев.. когда не поленился и потратил время на ..... даже не знаю зачем это сделал.

http://demo.nevigen.com/cars/coupe.html
поменяйте Class (attr):

Вот так не работает ?
Профессиональные / Бесплатные решения для JoomShopping
Не лечи бесплатно, ибо тот, кто лечится бесплатно, рано или поздно перестает ценить свое здоровье,
а тот, кто лечит бесплатно, рано или поздно перестает ценить результаты своего труда/ (с) Гиппократ?
Не ищите ответов, ищите решение !
*

intcorp

  • Захожу иногда
  • 456
  • 12 / 0
Да, действительно. Наверное из-за каких-то предыдущих правок не работает. Ушел искать...
Спасибо)
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

При сохранении товара удаляется оригинал картинки

Автор zahar_92

Ответов: 20
Просмотров: 1127
Последний ответ 28.04.2020, 12:53:49
от kit2m2
Заменить открытие картинки в списке товаров на переход в его карточку

Автор VladislavMar

Ответов: 11
Просмотров: 971
Последний ответ 03.08.2019, 22:45:10
от VladislavMar
Не открываются картинки товара в "lightbox".

Автор kozovod

Ответов: 267
Просмотров: 39594
Последний ответ 03.07.2019, 18:05:39
от cellissimo
Картинки в мобильной версии

Автор Indexxx

Ответов: 24
Просмотров: 1988
Последний ответ 17.05.2019, 10:36:25
от Indexxx
Замена звёздочек рейтинга на карточке товара

Автор Mesk911

Ответов: 23
Просмотров: 3352
Последний ответ 29.10.2018, 02:41:24
от kit2m2