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

Народ, помогите В замешательстве В замешательстве как все-таки сделать, чтобы после того как человек нажимает кнопку "Отправить заказ" человек переходил на страницу (надпись) где было бы сообщение "Заявка принята"

В настройке кнопки отправить - стоит скрипт ff_validate_submitted (что-то типа этого)

а в  настройках самой формы поставил следующий код:
global $mosConfig_mailfrom, $mosConfig_fromname, $my;

$this->execPieceByName('ff_InitLib');

// Send profile to Client

$from = ff_getSubmit('fldReplyEmail');
$fromname = ff_getSubmit('FirstName').' '.ff_getSubmit('Surname');
$subject = ('Заказ с сайта');
$recipient = 'my@mail.ru';

foreach ($this->maildata as $data) {
     if ($data[_FF_DATA_TYPE] != 'Hidden Input') {
          $body .= $data[_FF_DATA_TITLE].": ".$data[_FF_DATA_VALUE].nl();
     }
}
$this->sendMail($from, $fromname, $recipient, $subject, $body);
*

Alex_B

  • Захожу иногда
  • 196
  • 39 / 0
сделай в таблице страницу с требующейся надписью (можно и с картинкой)

для кнопки "Отправить заказ" сделай свой скрипт стандартными средствами ФасилФорм - "Управление скриптами"

function my_next(element, action)
{
  ff_switchpage(ff_getPageByName('you_page'));
  ff_submitForm();
}

'you_page' - заголовок страницы на которой размещена надпись "Заявка принята"

Так или что-то вроде того
Вроде должно работать..(не проверял)
*

Alex_B

  • Захожу иногда
  • 196
  • 39 / 0
(предудущий мой пост не работает)

сам сталкнулся с такойже потребностью
Цитировать
человек нажимает кнопку "Отправить заказ" человек переходил на страницу (надпись) где было бы сообщение "Заявка принята"
Делается это так:
1. В таблице помимо всего прочего создаются две страницы:
   первая- содержит текст(картинку) который отображается в процессе выполнения скрипта (MY_PAGE1)
   вторая- содержит текст(картинку) который сообщает что заказ принят (MY_PAGE2)

2. Заходим в "Редактировать форму" -> нажимаем на вкладку "Скрипты" -> Submitted Скрипт -> Пользовательский

3. Вставляем туда следующее
Код
function ff_MYFORM_submitted(status)
{
    if (status != 0) {
        alert(
            "Простите ваш заказ прохерился\n"+
            "Мы разберемся с этим\n"+
            "Сейчас вы переместитеть на home page."
        );
        ff_returnHome();
    } else
        ff_switchpage(ff_getPageByName('MY_PAGE2'));
}
ВНИМАНИЕ: MYFORM - это имя вашей формы, оно должно совпадать
(проверьте это имя на вкладке "Настройки")

4. Обработчик кнопки принятия формы выглядит примерно так:
Код
function my_sub(element, action)
{
   //проверка правильности заполнения данной страницы
   error = ff_validation(ff_currentpage);
   if (error != '')
   {
     alert(error);
     ff_validationFocus('');
   }
   else
   {
     //принять форму
     ff_submitForm();
     //переход на страницу MY_PAGE1
     ff_switchpage(ff_getPageByName('MY_PAGE1'));
   }
}

 //принять форму
     ff_submitForm();
     //переход на страницу MY_PAGE1
     ff_switchpage(ff_getPageByName('MY_PAGE1'));


здесь MY_PAGE1 это что?
*

Alex_B

  • Захожу иногда
  • 196
  • 39 / 0
MY_PAGE1 - это страница в форме.

Сейчас не помню уже точно, но вроде названием страницы формы будет "Имя" первой надписи "Статичный Text/HTML" размещенное в самом начале страницы.
*

Natasha

  • Захожу иногда
  • 93
  • 16 / 0
А как не возвращаться к форме????

т.е. я в скриптах самой формы написала
"Редактировать форму" -> нажимаем на вкладку "Скрипты" -> Submitted Скрипт -> Пользовательский
Код
function ff_quesInternet_submitted(status)
{
    switch (status) {
        case FF_STATUS_OK:
           // do whatever desired on success

ff_redirect('/projects/technopolice/index.php?option=com_content&task=view&id=225');


           break;
        case FF_STATUS_UNPUBLISHED:
        case FF_STATUS_SAVERECORD_FAILED:
        case FF_STATUS_SAVESUBRECORD_FAILED:
        case FF_STATUS_UPLOAD_FAILED:
        case FF_STATUS_ATTACHMENT_FAILED:
        case FF_STATUS_SENDMAIL_FAILED:
//        default:
         //  alert();
    } // switch
} // ff_quesInternet_submitted

Теперь после того как введешь данные - форма отправляет письмо, показывается незаполненная форма, и только через некоторое время следует redirect :(

Как это изменить?
*

Alex_B

  • Захожу иногда
  • 196
  • 39 / 0
Natasha, попробуйте заменить

ff_redirect('/projects/technopolice/index.php?option=com_content&task=view&id=225');

на

window.location.href('http://mysite.ru/projects/technopolice/index.php?option=com_content&task=view&id=225');
*

Natasha

  • Захожу иногда
  • 93
  • 16 / 0
Alex_B, нет :(
совсем не переходит, но форма отправляется
*

Alex_B

  • Захожу иногда
  • 196
  • 39 / 0
*

Natasha

  • Захожу иногда
  • 93
  • 16 / 0
не-е
форма показывается и пересылает на 1-ю страницу а не ту которая нужна....

:(
почему вообще форма остается?
*

Alex_B

  • Захожу иногда
  • 196
  • 39 / 0
не-е
форма показывается и пересылает на 1-ю страницу а не ту которая нужна....
может адрес не тот? а на первую может отсылать если настройки такие - не 404 ошиьку показывать, а отправлять на первую

почему вообще форма остается?
Возможно в FF так реализовано, что "Submitted Скрипт" вызывается только когда страница будет загружена полностью - форма отправляется, при этом страничка перегружается, и вот пока она не загрузится "Submitted Скрипт" не сработает. (только предположение)
*

Natasha

  • Захожу иногда
  • 93
  • 16 / 0
добавила в конце Itemid, теперь на нужную страницу пересылается, только форма все равно показывается
причем не заполненая

может ты и прав про FF
как бы это все исправить еще......
*

Ole888

  • Осваиваюсь на форуме
  • 35
  • 0 / 0
скажите вообще незнающему человеку - в каком файле это вообще делается?:D
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

facileforms - вместо русских символов знаки "?"

Автор Galadrim

Ответов: 11
Просмотров: 6021
Последний ответ 22.06.2009, 14:12:37
от Galadrim