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

Grinders

  • Осваиваюсь на форуме
  • 43
  • 1 / 0
Вот написал событие к кнопке которая находится а админ панели.
Все действия происходили в файле default.php расположенному в administrator/components/com_joomgallery/views/images/tmpl
Код: php
<input type=button name="forever" value="Отметить фото удовлетворяющие условию" onClick=(<?php
$db = JFactory::getDBO();
$query = 'UPDATE `newsite`.`jos_joomgallery` SET `forever` = \'1\' WHERE `jos_joomgallery`.`id` = 105';
$db->setQuery( $query );
$db->query();
  ?> />
1. Данное событие работает только для Joomla 1.5 строки. Подскажите как привязать туда id всех существующих строк таблицы. Пытался вставить $row->id но безрезультатно.
2. Код в вышеупомянутом виде присваивает сроке значение вне зависимости от события кнопки а просто после обновления страницы.
3. Как сделать так чтобы после нажатия на кнопку страница обновлялась.
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
Вы думаете в браузере когда нажмеш эту кнопочку начнет выполняться php-код? O_o
php-серверный язык, исполняется на сервере, ну на компьютере без монитора, на котором расположены файлы вашего сайта (Joomla)
javascript - клиентский язык, выполняется в браузере пользователя. Атрибут onclick нужен для задания обработчика события click на языке javascript. Осознайте эту разницу и будет вам счастье.
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

Grinders

  • Осваиваюсь на форуме
  • 43
  • 1 / 0
Вы думаете в браузере когда нажмеш эту кнопочку начнет выполняться php-код? O_o
php-серверный язык, исполняется на сервере, ну на компьютере без монитора, на котором расположены файлы вашего сайта (Joomla)
javascript - клиентский язык, выполняется в браузере пользователя. Атрибут onclick нужен для задания обработчика события click на языке javascript. Осознайте эту разницу и будет вам счастье.
А более конкретнее (если можно на моем примере) пояснить разницу сможете? скажем так чтобы осознать в чем было мое счастье. А то объяснять, что такое сервер (типа компьютер без монитора) когда были заданы я считаю конкретные вопросы ну уж чистое пустословие. Вы меня конечно извините, но разницу между php и javascript я осознал, но хотелось бы более конкретных ответов на мои вопросы.
Если Вам не понятны мои вопросы то извеняйте как могу так и задаю, если бы разбирался в этой теме то не просил бы помощи.
*

SmokerMan

  • Гуру
  • 5290
  • 720 / 26
Вы меня конечно извините, но разницу между php и javascript я осознал
судя по тому что написано выше, хреново осознал)))
совет здесь может быть только один - учить мат часть! или покурить мантры.
не зная и не понимая основ никогда ничего не получится.
*

Grinders

  • Осваиваюсь на форуме
  • 43
  • 1 / 0
судя по тому что написано выше, хреново осознал)))
совет здесь может быть только один - учить мат часть! или покурить мантры.
не зная и не понимая основ никогда ничего не получится.

Как говориться лучше один раз увидеть чем сто раз услышать. Конечно самое простое тыкнуть носом и отправить учить мат часть. Но для меня проще и понятнее на живом примере.
Вы меня конечно извините, но я просто такой человек прежде чем задать вопрос стараюсь на сколько можно разобраться в нем сам (вы конечно можете сказать ХРЕНОВО РАЗБИРАЛСЯ - это Ваше право). Но увы ответа на свои вопросы пока сам не нашел (но буду пытаться).
*

Grinders

  • Осваиваюсь на форуме
  • 43
  • 1 / 0
Подскажите пожалуйста как все таки в данной строке:

$query = 'UPDATE `newsite`.`jos_joomgallery` SET `forever` = \'1\' WHERE `jos_joomgallery`.`id` = 105';
 сделать так чтобы id задавалось некоторой переменной (если это конечно возможно), а не числом 105 как показано выше.
*

Grinders

  • Осваиваюсь на форуме
  • 43
  • 1 / 0
Спасибо. Разобрался.
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
Механизм работы должен быть такой:
на странице должна быть ссылка навроде такой:
index.php?option=com_joomgallery&task=forever

Тоесть нажимая эту ссылку мы отправяем запрос на сервер, передавая параметры option - нужный нам компонент, и task - "задача", вписыаешь сюда название задачи. При обработке такого запроса Joomla вызовет метод forever() из файла controller.php, того что в папке /joomlagallery .
Тоесть в класс объявленный в этом файл нужно дописать этот метод.
И уже в этом методе делать то что нужно - вытягивать чета из базы, или что вы хотите делать.
Но мое "высокомерное" :) мнение что у тебя маловато познаний для того чтобы сделать это.
Хотя опять же ты не описал стоящую перед тобой задачу, а описал только "проблему", что твой код "немного не работает" хотя он даже близко не стоит к решению задачи. Вобщем напиши че ты хочешь сделать, а иначе тебе тут врядли смогут помочь, а будут писать только свои "высокомерные" мнения.
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

Grinders

  • Осваиваюсь на форуме
  • 43
  • 1 / 0
1. что хотелось решить исходя из вышеприведенного кода так чтобы `id` присваивалось не значение 105, а вместо него было присвоено значение некоторой переменной к примеру $v которую берем допустим из цикла и в зависимости от условия в этой же строке `forever` присваиваем значение 1. Этот вопрос решил. Неправильно формировался запрос  в базу.
2. хотелось бы выполнение данного кода да не важно можно и не этого
Код: php
<?php
$db = JFactory::getDBO();
$query = 'UPDATE `newsite`.`jos_joomgallery` SET `forever` = \'1\' WHERE `jos_joomgallery`.`id` = 105';
$db->setQuery( $query );
$db->query();
  ?>
каким то образом прикрутить к событию onClick. Честно ранее не даже и не сталкивался с этим. Но тем не менее спасибо danik.html, буду разбираться.
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
1)В php значение переменной вставить в строку можно так:
Код: php
$query = 'UPDATE `newsite`.`jos_joomgallery` SET `forever` = \''. $v .'\' WHERE `jos_joomgallery`.`id` = 105';
Или так
Код: php
$query = "UPDATE `newsite`.`jos_joomgallery` SET `forever` = '$v' WHERE `jos_joomgallery`.`id` = 105";
Тоесть строка в двойных кавычках обрабатывается по другому,и в ней обрабатываются php-переменные

По второму вопросу я вам примерную схему описал:
Так как "onclick" - событие, происходящее в браузере, а действия которые необходимо совершить по этому событию должны выполняться на сервере, то единственный способ - создание http-запроса, с параметрами, которые указывают скрипту на сервере, что ему нужно делать.
Это можеть быть просто ссылка, типа index.php?option=com_joomgallery&task=forever
Либо формочка, примерно такая:
Код: html4strict
<form action="/administrator/index.php">
<input type="hidden" name="option" value="com_joomlagallery" />
<button type="submit" name="task" value="forever">Выполнить "задачу" "forever"</button>
</form>

【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

Grinders

  • Осваиваюсь на форуме
  • 43
  • 1 / 0
1)В php значение переменной вставить в строку можно так:
Код: php
$query = 'UPDATE `newsite`.`jos_joomgallery` SET `forever` = \''. $v .'\' WHERE `jos_joomgallery`.`id` = 105';
Или так
Код: php
$query = "UPDATE `newsite`.`jos_joomgallery` SET `forever` = '$v' WHERE `jos_joomgallery`.`id` = 105";
Тоесть строка в двойных кавычках обрабатывается по другому,и в ней обрабатываются php-переменные

По второму вопросу я вам примерную схему описал:
Так как "onclick" - событие, происходящее в браузере, а действия которые необходимо совершить по этому событию должны выполняться на сервере, то единственный способ - создание http-запроса, с параметрами, которые указывают скрипту на сервере, что ему нужно делать.
Это можеть быть просто ссылка, типа index.php?option=com_joomgallery&task=forever
Либо формочка, примерно такая:
Код: html4strict
<form action="/administrator/index.php">
<input type="hidden" name="option" value="com_joomlagallery" />
<button type="submit" name="task" value="forever">Выполнить "задачу" "forever"</button>
</form>

По первому вопросу вчера вечером разобрался, по неопытности просто одну кавычку поставил не там где нужно и из-за этого сидел голову ломал целый день (будет уроком). Хотя про это читал и на этом форуме и в сети.
По второму вопросу сейчас ковыряюсь разбираюсь. Но в любом случае спасибо за помощь. Как че сделаю отпишусь.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Ошибка #1050 при переносе базы данных на хостинг

Автор Ksen

Ответов: 7
Просмотров: 24781
Последний ответ 16.03.2020, 17:47:29
от Petrovich
Передача данных в форму при нажатии на ссылку

Автор usmdamir

Ответов: 4
Просмотров: 1639
Последний ответ 26.07.2017, 09:40:22
от usmdamir
Re: Изменение таблиц базы данных

Автор ZAlex60

Ответов: 4
Просмотров: 1465
Последний ответ 23.09.2016, 09:57:14
от ZAlex60
Подкорректировать SQL запрос

Автор yuri-it

Ответов: 9
Просмотров: 1901
Последний ответ 05.02.2016, 21:19:26
от robert
SQL запрос для добавления статьи в базу Joomla

Автор Vovk@

Ответов: 38
Просмотров: 8651
Последний ответ 27.01.2016, 22:52:40
от voland