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

Vitos

  • Захожу иногда
  • 161
  • 6 / 0
Друзья, появилась идея загрузки изображений по внешней ссылке. Есть прямая URL на фото товара, можно сократить время и не качать изображение, а сразу указать ссылку на него. Кто пробовал добавить такую функцию? Сложно будет это сделать?
*

Vitos

  • Захожу иногда
  • 161
  • 6 / 0
Re: Загрузка изображения товара по URL
« Ответ #1 : 05.05.2013, 21:43:47 »
Весь вечер активно копал интернет в поисках хоть какой то информации по загрузке файлов через URL - безуспешно.
Наткнулся на такой же вопрос, без ответа, на офф форуме Jshopping. Видимо сложно.
*

antony2606

  • Давно я тут
  • 633
  • 46 / 4
  • Работаем!
Re: Загрузка изображения товара по URL
« Ответ #2 : 05.05.2013, 23:05:05 »
По всей видимости - да (
*

Linfuby

  • Завсегдатай
  • 1242
  • 176 / 0
  • Всё просто...
Re: Загрузка изображения товара по URL
« Ответ #3 : 06.05.2013, 10:47:23 »
Друзья, появилась идея загрузки изображений по внешней ссылке. Есть прямая URL на фото товара, можно сократить время и не качать изображение, а сразу указать ссылку на него.
Задумка понятна. В стиле любого программиста желающего сократить количество кликов.
Для начала нужно добавить поле в админке в закладке "Фото" с типом text. (administrator/components/com_jshopping/views/product_edit/tmpl/images.php)
Потом на событие "Сохранить" (function save() в файле administrator/components/com_jshopping/controllers/products.php) повесить перебор всех этих полей и выполнение кода по сохранению изображения.
Код ищем в Поисковых системах с запросом например "php сохранить изображение по ссылке"
После этого передать имя файла вместо того, что передается из поля с типом file.
Только учтите, что это будет хак. И его необходимость, как и востребованность под огромным вопросом.
Немного воображения и логики, и любая проблема становится решенной.
Кривые решения - дают кривой результат!
Решения для JoomShopping
Благодарности и поддержка принимаются по след. реквизитам:
Яндекс.Деньги - 41001751720054
*

Vitos

  • Захожу иногда
  • 161
  • 6 / 0
Re: Загрузка изображения товара по URL
« Ответ #4 : 06.05.2013, 11:08:09 »
Цитировать
Только учтите, что это будет хак. И его необходимость, как и востребованность под огромным вопросом.
Ну это да. Здесь каждый для себя решает. В отдельных случаях очень полезно. Спасибо за совет - будем искать.
*

Vitos

  • Захожу иногда
  • 161
  • 6 / 0
Re: Загрузка изображения товара по URL
« Ответ #5 : 07.05.2013, 01:39:36 »
Linfuby, первые несколько пунктов я сделал, при нажатии "сохранить", нужный файл сохраняется в нужном каталоге на сервере.
Теперь осталось самое сложное:
Цитировать
передать имя файла вместо того, что передается из поля с типом file
нуждаюсь в вашем совете - где ковырять теперь, уточните пожалуйста? :)
*

Linfuby

  • Завсегдатай
  • 1242
  • 176 / 0
  • Всё просто...
Re: Загрузка изображения товара по URL
« Ответ #6 : 07.05.2013, 10:24:07 »
нуждаюсь в вашем совете - где ковырять теперь, уточните пожалуйста? :)
Файл administrator/components/com_jshopping/models/products.php
Функция uploadImages
Там прекрасно видно, что идёт перебор всех полей и там происходит загрузка каждого файла. Потом происходит ресайз изображения и вот тут происходит присвоение изображения для товара:
Код
$this->addToProductImage($product_id, $name_full, $name_image, $name_thumb, $post["product_image_descr_".$i]);
Немного воображения и логики, и любая проблема становится решенной.
Кривые решения - дают кривой результат!
Решения для JoomShopping
Благодарности и поддержка принимаются по след. реквизитам:
Яндекс.Деньги - 41001751720054
*

Vitos

  • Захожу иногда
  • 161
  • 6 / 0
Re: Загрузка изображения товара по URL
« Ответ #7 : 07.05.2013, 21:09:22 »
Спасибо за детальное описание, но с первого раза не получилось, и даже с третьего... :)
По сути, после всех вышеописанных манипуляций, я имею сейчас нужное(загруженное по URL) фото у себя на сервере, например в папке images/
и мне нужно чтобы  функция uploadImages подхватывала этот файл так-же как и те файлы с компьютера, что я указываю в "стандартных" полях. Дабы правильно работал ресайз и присвоение. Я так это понимаю.
Но как правильно это сделать я так и не смог понять :( буду пробовать.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Эффект увеличения изображения zoom (плагин)

Автор Brooksus

Ответов: 136
Просмотров: 29750
Последний ответ 02.07.2025, 12:40:20
от nevigen
В списке товаров вывести названия категорий каждого товара

Автор shop-user

Ответов: 5
Просмотров: 2867
Последний ответ 25.01.2022, 06:05:12
от kit2m2
Плагин - Инфоблок товара в списке товаров [Скачать]

Автор kit2m2

Ответов: 13
Просмотров: 3131
Последний ответ 20.10.2021, 14:51:08
от kit2m2
Автоматическая генерация кода товара (плагин)

Автор maslybs

Ответов: 8
Просмотров: 3559
Последний ответ 30.08.2021, 20:21:25
от nevigen
Таблица размеров (и т.п.) Плагин модульных позиций для атрибутов на странице товара [Скачать]

Автор kit2m2

Ответов: 39
Просмотров: 7989
Последний ответ 16.05.2021, 18:16:50
от kit2m2