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

PaLyCH

  • Давно я тут
  • 956
  • 146 / 19
  • Менеджер проектов
Делаю простую форму. Заказчик не хочет иметь дело с каптчей. Просит чтобы просто было два поля для электронной почты. При отправке должны проверяться. Равны - отправлено, не равно  - проверьте введенный е-майл. !!!???!!!
*

PaLyCH

  • Давно я тут
  • 956
  • 146 / 19
  • Менеджер проектов
Re: Проверка введеных значений
« Ответ #1 : 25.03.2008, 15:23:36 »
Готов денег кинуть в счет готового решения
*

tsesl

  • Захожу иногда
  • 363
  • 87 / 0
  • Терпение и труд всё перетрут?
Re: Проверка введеных значений
« Ответ #2 : 25.03.2008, 16:17:30 »
Немного мутно описан механизм... Опиши подробнее: что за форма, что как должно проверяться и т.д.
FAQ смотрел? Версию указал?
*

PaLyCH

  • Давно я тут
  • 956
  • 146 / 19
  • Менеджер проектов
Re: Проверка введеных значений
« Ответ #3 : 25.03.2008, 16:27:40 »
Два поля для ввода электронной почты. При отсылке должен два поля должны сравниться, если равны, то письмо уходит, если нет. Просьба проверить адреса.

[вложение удалено Администратором]
« Последнее редактирование: 25.03.2008, 16:36:46 от PaLyCH »
*

Muratty

  • Захожу иногда
  • 130
  • 9 / 0
  • не стреляёте в пианиста, он играет как умеет...
Re: Проверка введеных значений
« Ответ #4 : 25.03.2008, 16:32:23 »
ну так сделай проверку на php например $mail_1=$mail_2 и от этого отталкивайся.
*

tsesl

  • Захожу иногда
  • 363
  • 87 / 0
  • Терпение и труд всё перетрут?
Re: Проверка введеных значений
« Ответ #5 : 25.03.2008, 16:33:56 »
ну... На javascript делается очень просто в FacileForms...
FAQ смотрел? Версию указал?
*

PaLyCH

  • Давно я тут
  • 956
  • 146 / 19
  • Менеджер проектов
Re: Проверка введеных значений
« Ответ #6 : 25.03.2008, 16:36:52 »
Прописал такую функцию, не работает почему то. Поля cf_email и cf_email2 это значения из соответствующи полей

Код
// load the standard FacileForms library
$this->execPieceByName('ff_InitLib');

// check attempt to post with invalid e-mail
if (ff_getSubmit('cf_email') != (ff_getSubmit('cf_email2') {
   //$this->status = 1000; // our custom error code
    $this->message = "Prover'te pravil'nost' vvedeniya e-mail.";
}
*

Muratty

  • Захожу иногда
  • 130
  • 9 / 0
  • не стреляёте в пианиста, он играет как умеет...
Re: Проверка введеных значений
« Ответ #7 : 25.03.2008, 16:45:04 »
if (ff_getSubmit('cf_email') != (ff_getSubmit('cf_email2') {

может if (ff_getSubmit('cf_email') !== (ff_getSubmit('cf_email2') {   ???
*

PaLyCH

  • Давно я тут
  • 956
  • 146 / 19
  • Менеджер проектов
Re: Проверка введеных значений
« Ответ #8 : 25.03.2008, 16:52:40 »
if (ff_getSubmit('cf_email') != (ff_getSubmit('cf_email2') {

может if (ff_getSubmit('cf_email') !== (ff_getSubmit('cf_email2') {   ???
А вот так
if (ff_getSubmit('cf_email') !== ff_getSubmit('cf_email2')) {  заработало
*

PaLyCH

  • Давно я тут
  • 956
  • 146 / 19
  • Менеджер проектов
Re: Проверка введеных значений
« Ответ #9 : 25.03.2008, 16:53:27 »
И как сделать, чтобы обратно к форме возвращался, а не на главную выбрасывал?
*

Muratty

  • Захожу иногда
  • 130
  • 9 / 0
  • не стреляёте в пианиста, он играет как умеет...
Re: Проверка введеных значений
« Ответ #10 : 25.03.2008, 16:59:41 »
Код
echo "<script>alert;
document.location.href='index.php?option=com_чтототам&Itemid=(твой_идстраничкиформы)'</script>\n";
примерно так должна работать адресация (возврат к форме), ессесно код не проверял а взял из формы стандартного контакта, чего и тебе желаю
*

tsesl

  • Захожу иногда
  • 363
  • 87 / 0
  • Терпение и труд всё перетрут?
Re: Проверка введеных значений
« Ответ #11 : 25.03.2008, 17:00:18 »
пробуй
ff_validationFocus();
FAQ смотрел? Версию указал?
*

PaLyCH

  • Давно я тут
  • 956
  • 146 / 19
  • Менеджер проектов
Re: Проверка введеных значений
« Ответ #12 : 25.03.2008, 17:04:37 »
Код
echo "<script>alert;
document.location.href='index.php?option=com_чтототам&Itemid=(твой_идстраничкиформы)'</script>\n";
примерно так должна работать адресация (возврат к форме), ессесно код не проверял а взял из формы стандартного контакта, чего и тебе желаю
Код не правильный, он делает оболочку для всей страницы.
пробуй
ff_validationFocus();
А как его правильно исползовать?
*

PaLyCH

  • Давно я тут
  • 956
  • 146 / 19
  • Менеджер проектов
Re: Проверка введеных значений
« Ответ #13 : 25.03.2008, 17:06:42 »
$this->execPieceByName('ff_validationFocus'); Вот так надо использовать :)))) Все работает, спасибо мужики
*

PaLyCH

  • Давно я тут
  • 956
  • 146 / 19
  • Менеджер проектов
Re: Проверка введеных значений
« Ответ #14 : 25.03.2008, 17:07:12 »
Остается только проблема с кодировками
*

tsesl

  • Захожу иногда
  • 363
  • 87 / 0
  • Терпение и труд всё перетрут?
Re: Проверка введеных значений
« Ответ #15 : 25.03.2008, 17:09:26 »
Ну я не знаю как там у тебя...

Вообще, логика изначально такая: делается validation-функция к требуемому элементу формы с пользовательским кодом, где производится проверка корректности значения. В случае неудачи - делается ff_validationFocus(); и return 'Сообщение об ошибке'... Все...
FAQ смотрел? Версию указал?
*

PaLyCH

  • Давно я тут
  • 956
  • 146 / 19
  • Менеджер проектов
Re: Проверка введеных значений
« Ответ #16 : 25.03.2008, 17:19:09 »
Эх, не быть мне программистом. Логика такая же у меня была, просто я не знал как реализовать ее
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Перемещение значений из option в option

Автор Edward

Ответов: 0
Просмотров: 2451
Последний ответ 30.06.2009, 03:23:01
от Edward
получение значений checkbox

Автор Vampiree

Ответов: 0
Просмотров: 3118
Последний ответ 21.12.2006, 19:08:36
от Vampiree