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

alexj69

  • Захожу иногда
  • 244
  • 28 / 0
  • Думать надо!!!
Неа, и в скобочки брал, и в другую переменную объединял и местами менял, не хочет на лету считать, там скорее всего какое-то действие в скрипте нужно указать, но я не силен в js
попробуйте document.forms['calcForm'].elements['dostavka1'].fireEvent('change');   должно работать
*

e.lodyanov

  • Захожу иногда
  • 126
  • 4 / 0
попробуйте document.forms['calcForm'].elements['dostavka1'].fireEvent('change');   должно работать
Спасибо, добрый человек! Работает как надо. "+" от меня уже поставил
*

radist_z

  • Осваиваюсь на форуме
  • 22
  • 0 / 0
Спасибо Вам  alexj69 за очередную подсказку, а вам e.lodyanov за вопрос. Тоже столкнулся с подобной проблемой. Но теперь всё работает. А то уже думал  прикрутить пустую кнопку для запуска подсчёта. 2 плюсика от меня.
*

e.lodyanov

  • Захожу иногда
  • 126
  • 4 / 0
Спасибо Вам  alexj69 за очередную подсказку, а вам e.lodyanov за вопрос. Тоже столкнулся с подобной проблемой. Но теперь всё работает. А то уже думал  прикрутить пустую кнопку для запуска подсчёта. 2 плюсика от меня.
))
*

egorovv

  • Осваиваюсь на форуме
  • 35
  • 0 / 1
После отправки вылазит ошибка:
Strict Standards: Declaration of FormCalcController::display() should be compatible with that of JController::display() in /var/www/test/data/www/site.ru/components/com_formcalc/controller.php on line 23
*

Single92

  • Захожу иногда
  • 134
  • 2 / 0
Здравствуйте. После отправки сообщения серез обратную форму. как обычно клиенту показывается Сообщение.

Как сделать что бы оно вылазило не на новой странице, а в системном сообщении, как обычно в Joomla?

с меня+
Заранее спасибо.
*

e.lodyanov

  • Захожу иногда
  • 126
  • 4 / 0
Здравствуйте. После отправки сообщения серез обратную форму. как обычно клиенту показывается Сообщение.

Как сделать что бы оно вылазило не на новой странице, а в системном сообщении, как обычно в Joomla?

с меня+
Заранее спасибо.
Поддерживаю вопрос. Было бы даже лучше в модальном окне сообщение. И чтобы все формы очищались при этом.
*

Pazys

  • Завсегдатай
  • 1738
  • 241 / 4
  • <a>А где я ошибся-то?</b>
Системное сообщение: в JS прописать после кнопки отправки alert('Ваше письмо отправлено');
Модальное окно: в JS прописать после кнопки отправки ваше модальное окно. Если брать J3 то можно использовать бутстраповское окошко.

Если надо конкретно решение, то увы не помогу .... не использую нигде компонент, и пока времени нет поставить и попробовать.
Ишак меня нюхал ...
Если помог - плюсуйте в карму.
*

e.lodyanov

  • Захожу иногда
  • 126
  • 4 / 0
Системное сообщение: в JS прописать после кнопки отправки alert('Ваше письмо отправлено');
Поискал про alert, такое пойдет?
Код
onsubmit="if(document.getElementById('cb').value==''){alert('!'); return false;}"
Модальное окно: в JS прописать после кнопки отправки ваше модальное окно. Если брать J3 то можно использовать бутстраповское окошко.
А такое окно пойдет?
Код
// Выводит всплывающее окно заданного типа

window.alert=function(text, mtype) {
// устанавливаем сообщение
$('._alert').html(text);
// указываем тип сообщения (стиль окна)
$('._alert').attr("className", "_alert " + mtype);
// выводим окно
$('#dialog').dialog({
modal: true,
width: 350,
minHeight: 80,
buttons: {
"Закрыть": function() {
$(this).dialog("close");
}
}
});
}
*

e.lodyanov

  • Захожу иногда
  • 126
  • 4 / 0
Подскажите, есть несколько input type="text", в которых клиенту нужно ввести кол-во заказываемого товара.
Требуется обязать клиента ввести хотя-бы в одном поле цифру, чтобы он не смог отправить пустую форму.
Пример одного input:
Код
<input type="text" name="et1300kol" class="validate['digit']">
*

usoft

  • Новичок
  • 2
  • 0 / 0
не сохраняются теги в шаблоне письма. при сохранении остаются только значения. как оформить письмо?
*

e.lodyanov

  • Захожу иногда
  • 126
  • 4 / 0
не сохраняются теги в шаблоне письма. при сохранении остаются только значения. как оформить письмо?
Я в БД через phpMyAdmin делал
*

usoft

  • Новичок
  • 2
  • 0 / 0
Я в БД через phpMyAdmin делал
можно подробнее?
*

e.lodyanov

  • Захожу иногда
  • 126
  • 4 / 0
можно подробнее?
Заходишь в phpMyAdmin, открываешь таблицу ..._formcalc в своей БД, нажимаешь Изменить на созданной форме и корректируешь строчку mail_template как нужно. Затем Ок и все готово.
*

waleryk1960

  • Новичок
  • 1
  • 0 / 0
Доброго времени суток!
Разобрался сам.
Спасибо.
« Последнее редактирование: 02.03.2014, 00:48:27 от waleryk1960 »
*

serg0071

  • Осваиваюсь на форуме
  • 42
  • 0 / 0
Здраствуйте!Помогите мне пожалуйста наладить калькулятор.Он работает, но мне охото чтобы он выводил сумму на каждой выбранной позиции, а не только общую сумму.Вот
Шаблон и формула.

Спойлер
[свернуть]

Спойлер
[свернуть]

хочу чтобы калькулятор работал также как вот здесь в каждой строчке.   http://mastershtuk.ru/online-zayavka     Помогите пожалуйста!У меня Joomla 1.5
« Последнее редактирование: 02.03.2014, 06:57:10 от serg0071 »
*

e.lodyanov

  • Захожу иногда
  • 126
  • 4 / 0
Здраствуйте!Помогите мне пожалуйста наладить калькулятор.Он работает, но мне охото чтобы он выводил сумму на каждой выбранной позиции, а не только общую сумму.Вот
Неправильно указываете вывод подсумм.
Вместо такого формата:
Код
<td><span id="resultmeh_disp">&nbsp;</span><input type="hidden" id="resultmeh" name="resultmeh" value=""/></td>
Нужно выводить:
Код
<td>{resultmeh}</td>
*

serg0071

  • Осваиваюсь на форуме
  • 42
  • 0 / 0
Неправильно указываете вывод подсумм.
Вместо такого формата:
Код
<td><span id="resultmeh_disp">&nbsp;</span><input type="hidden" id="resultmeh" name="resultmeh" value=""/></td>
Нужно выводить:
Код
<td>{resultmeh}</td>

Сделал как вы мне говорили, все-равно все тоже самое получается!Может скрипт какой-нибудь надо писать?
*

e.lodyanov

  • Захожу иногда
  • 126
  • 4 / 0
Сделал как вы мне говорили, все-равно все тоже самое получается!Может скрипт какой-нибудь надо писать?
Проглядел, что нужно еще убрать из кода, который Вы вставляете в компоненте это:
Код
<form action="index.php" enctype="multipart/form-data" name="calcForm" id="calcForm" method="post">
Также проверьте, подключен ли mootools в head
*

alexj69

  • Захожу иногда
  • 244
  • 28 / 0
  • Думать надо!!!
Вот рабочий код. Форма:
Спойлер
[свернуть]
Формула:
Спойлер
[свернуть]
Для удобства поставьте вот такой скрипт к инпутам:
Код
onfocus="this.value=(this.value=='0')? '' : this.value;" onblur="this.value=(this.value=='')? '0' : this.value;" onclick="this.value='';"
Тогда при клике текстовое поле будет очищаться
*

e.lodyanov

  • Захожу иногда
  • 126
  • 4 / 0
alexj69 Я немного выше уже спрашивал, Вы случайно не знаете как сделать?
Есть несколько input type="text", в которых клиенту нужно ввести кол-во заказываемого товара.
Требуется обязать клиента ввести хотя-бы в одном поле цифру, чтобы он не смог отправить пустую форму.
Пример одного input:
Код
<input type="text" name="et1300kol" class="validate['digit']">
*

alexj69

  • Захожу иногда
  • 244
  • 28 / 0
  • Думать надо!!!
Нужно ставить class="validate['required','digit']"
required - признак обязательного заполнения поля
*

e.lodyanov

  • Захожу иногда
  • 126
  • 4 / 0
Нужно ставить class="validate['required','digit']"
required - признак обязательного заполнения поля
Это я знаю. Я имел ввиду, что нужно обязать человека ввести хотя бы в одно поле данные. У меня 3 товара, напротив каждого можно выбрать кол-во. Нужно чтобы человек не смог отправить данные не указав какой товар и сколько ему нужно
*

alexj69

  • Захожу иногда
  • 244
  • 28 / 0
  • Думать надо!!!
Тогда нужно какую-то проверку делать перед отправкой или сделать кнопку отправки неактивной пока не будет заполнено хоть одно поле. Покажите форму, я посмотрю на досуге...
*

e.lodyanov

  • Захожу иногда
  • 126
  • 4 / 0
Тогда нужно какую-то проверку делать перед отправкой или сделать кнопку отправки неактивной пока не будет заполнено хоть одно поле. Покажите форму, я посмотрю на досуге...
http://demo4.s-2-b.com/zakazat
Заранее благодарю!
*

alexj69

  • Захожу иногда
  • 244
  • 28 / 0
  • Думать надо!!!
Добавьте к кнопке атрибут disabled. У Вас есть обязательные поля для заполнения. Повесьте на них событие onchange="check(this.form)" . и используйте скрипт проверки:
  <script>
   function check(f) {
rez=document.getElementById("itogo").value;
   if (rez==0)alert('Выберите хотя бы один товар');
    else f.submit.disabled = 1
   }
  </script>

Должно работать
*

Dmitriy240

  • Осваиваюсь на форуме
  • 25
  • 0 / 0
Может кому поможет:
В компоненте калькулятор на шаблоне от студии ThemeForest не работал вывод результатов. Нужно зайти в Расширения-Менеджер шаблонов-Стили-Выбрать подключенный на странице с калькулятором стиль шаблона-Настройки-Advanced-В графе noConflict Script выбрать NO.
В ходе поисков нашел компонент который включает/отключает Mootools на нужных вам страницах сайта. Работу его не тестировал, но кому интересно - Mootools Enabler/Disabler.
*

serg0071

  • Осваиваюсь на форуме
  • 42
  • 0 / 0
Спасибо большое за помощь.Все работате на отлично.Сделал калькулятор какой мне надо!
*

e.lodyanov

  • Захожу иногда
  • 126
  • 4 / 0
Добавьте к кнопке атрибут disabled. У Вас есть обязательные поля для заполнения. Повесьте на них событие onchange="check(this.form)" . и используйте скрипт проверки:
  <script>
   function check(f) {
rez=document.getElementById("itogo").value;
   if (rez==0)alert('Выберите хотя бы один товар');
    else f.submit.disabled = 1
   }
  </script>

Должно работать
Спасибо за ответ, но не работает. Уведомление идет, но кнопка не активизируется.
Я не силен в скриптах, но может такой вариант (нашел на http://htmlbook.ru/html/input/disabled) + небольшая корректировка Вашего скрипта решит проблему?
Код
<p><input type="text" size="30" onchange="this.form.submit.disabled=0"></p>
<p><input type="submit" name="submit" value="Отправить" disabled></p>
*

alexj69

  • Захожу иногда
  • 244
  • 28 / 0
  • Думать надо!!!
Немного ошибся в коде. замените в строчке     else f.submit.disabled =  единицу на ноль. Тогда кнопка активируется. Можете заменить onchange на onKeyUp, тогда проверка будет происходить после каждого нажатия клавиши.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Компонент Web Plan интерактивная карта для Joomla 1.5 (построение сайтов плановых объектов)

Автор DelaShop

Ответов: 39
Просмотров: 32427
Последний ответ 21.01.2018, 14:50:57
от Dinamitt
Калькулятор форм - продолжение

Автор osobist

Ответов: 2
Просмотров: 5295
Последний ответ 25.01.2015, 18:00:18
от dj_serg
Отрывной календарь Joomla, календарь событий.

Автор DelaShop

Ответов: 35
Просмотров: 32564
Последний ответ 17.12.2014, 06:20:05
от EndVal
Компонент " Просто каталог Joomla + Mixmarket Joomla "

Автор DelaShop

Ответов: 16
Просмотров: 18449
Последний ответ 10.07.2013, 11:06:13
от konservator