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

alex_d55

  • Осваиваюсь на форуме
  • 10
  • 0 / 0
Почитайте на форуме, я где-то в начале этой ветки выкладывал решение. Суть в том, что при одном селекте передавать в два скрытых поля разные значения: в первое - цена, во второе - название. Тогда при расчете вы используете первое поле, а для отправки на е-мейл - второе

дело в том, что это происходит на всех сайтах где были установлены эти калькуляторы..
*

alexj69

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

alex_d55

  • Осваиваюсь на форуме
  • 10
  • 0 / 0
у меня на сайте установлен этот компонент и работает нормально http://заказать-транспорт.рф/калькуляторы/калькулятор-перевозок-по-москве

тут даже в заголовке темы на демо-странице такая фигня происходит может от версии Joomla зависит у меня на 1.5 полетело все...
*

NRJalex

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

alex_d55

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

а версия какая, тоже 1.5?
p.s. личка у мну работает только на прием почему-то... не, я догадываюсь, что в правилах скорее всего ответ есть, но лень искать))
*

NRJalex

  • Осваиваюсь на форуме
  • 24
  • 1 / 0
а версия какая, тоже 1.5?
p.s. личка у мну работает только на прием почему-то... не, я догадываюсь, что в правилах скорее всего ответ есть, но лень искать))


версия 2.5
*

alex_d55

  • Осваиваюсь на форуме
  • 10
  • 0 / 0
хм... причем, если удается принудительно остановить страницу, то калькулятор начинает нормально работать....
*

alexj69

  • Захожу иногда
  • 244
  • 28 / 0
  • Думать надо!!!
Вот калькулятор на Joomla 1.5 http://www.6416992.ru/sbornyie-gruzyi все работает.


Посмотрел исходный код демо страницы. Там перезагрузку вызывает ихний "копирайт" календарь и самоделки...
Спойлер
[свернуть]
Удаляйте его из компонента и плагина (на форуме было писано как это сделать)
*

alex_d55

  • Осваиваюсь на форуме
  • 10
  • 0 / 0
Удаляйте его из компонента и плагина (на форуме было писано как это сделать)
только что обратил внимание, что он появился!! его не было!!
Спасибо!)))
*

alex_d55

  • Осваиваюсь на форуме
  • 10
  • 0 / 0
Копирайт снес, и все равно все тоже самое....
*

alexj69

  • Захожу иногда
  • 244
  • 28 / 0
  • Думать надо!!!
Вы точно все удалили? и в плагине и в компоненте? дайте ссылку на сайт.
*

alex_d55

  • Осваиваюсь на форуме
  • 10
  • 0 / 0
http://moy-parket.ru/raschet-cen

саму ссыль точно удалил...
*

alexj69

  • Захожу иногда
  • 244
  • 28 / 0
  • Думать надо!!!
Не все подчистил. Еще тянет код с другого сайта:
Спойлер
[свернуть]
Что именно удалял?
*

alex_d55

  • Осваиваюсь на форуме
  • 10
  • 0 / 0
Не все подчистил. Еще тянет код с другого сайта:
Спойлер
[свернуть]
Что именно удалял?

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

вот этот блок

если быть совсем точным то этот

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

alexj69

  • Захожу иногда
  • 244
  • 28 / 0
  • Думать надо!!!
Читайте внимательно ВЕСЬ форум. Вот решение http://joomlaforum.ru/index.php/topic,145164.msg1297284.html#msg1297284
*

alex_d55

  • Осваиваюсь на форуме
  • 10
  • 0 / 0
Читайте внимательно ВЕСЬ форум. Вот решение http://joomlaforum.ru/index.php/topic,145164.msg1297284.html#msg1297284
Каюсь пропустил.. низкий поклон тебе, добрый человек, подтверждаю проблема исчезла!
*

bucksnsk

  • Новичок
  • 2
  • 0 / 0
При открытии шаблона формы FormCalc выходит следующее:
Цитировать
Strict Standards: Declaration of FormCalcController::display() should be compatible with that of JControllerLegacy::display() in D:\OpenServer\domains\joomla.test\administrator\components\com_formcalc\controller.php on line 35

Strict Standards: Declaration of TableFormCalc::bind() should be compatible with that of JTable::bind() in D:\OpenServer\domains\joomla.test\administrator\components\com_formcalc\tables\formcalc.php on line 90
Далее всё открывается и редактируется, но в результате на тег {formcalc 1} даёт один пробел (в качестве шаблона использую один из примеров, не самописный). Joomla 3.2.1
*

radist_z

  • Осваиваюсь на форуме
  • 22
  • 0 / 0
Задавал уже вопрос. Поскольку на форуме появился уважаемый alexj69 и вопрос скорее всего Вам ещё раз повторюсь.
Какой скриптик написать в шаблона  сообщения, чтобы приходило не только стоимость, но и название выбранного товара. А тот товар, который не выбирался, отсутствовал бы вообще в письме. Примерно такой http://metal-m.ru/indexpage.php?page=calc вывод письма в виде коммерческого предложения.
*

alexj69

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

radist_z

  • Осваиваюсь на форуме
  • 22
  • 0 / 0
Огромное спасибо за идею. Плюсик пока поставить не могу. Говорят мал ещё.
*

bucksnsk

  • Новичок
  • 2
  • 0 / 0
Предположим что этот этот глюк был из за использования виндового окружения, но на хостинге компонент у меня отказался понимать русский язык, все русские символы после сохранения становятся вопрсами "?" повторюсь версия Joomla 3.2.1 кодировка utf-8, плагин и компонент скачаны вчера по линкам из шапки. И так же как на винде, на хостинге форма не отображается, плагин включен, {formcalc 1} прописан, в материале есть, на странице пустота.
*

Pazys

  • Завсегдатай
  • 1738
  • 241 / 4
  • <a>А где я ошибся-то?</b>
У меня плагин не работал на j3, компонент - да, а плагин нет.
Ишак меня нюхал ...
Если помог - плюсуйте в карму.
*

zeus07

  • Давно я тут
  • 723
  • 9 / 0
Здравствуйте!
Подскажите пожалуйста, такая проблема. Пытаюсь сделать зависимые селекты, делаю по образцу как на сайте, но калькулятор вообще не считает. Где-то видимо ошибка закралась. Посмотрите пожалуйста свежим взглядом, может найдёте.

Код калькулятора:
Код
<form name="calcForm">
<script type="text/javascript">
function calcCost() {
           var obem = document.getElementById("obem").value;
           var tolschina = document.getElementById("tolschina").value;
           var krishka = document.getElementById("krishka").value;
           var koleso = document.getElementById("koleso").value;
           var kolvo = document.getElementById("kolvo").value;
           var itog = (tolschina + krishka + koleso)*kolvo;
}
function look(type){
param=document.getElementById(type);
if(param.style.display == "none")
param.style.display = "block";
else
param.style.display = "none"
}

function izmen(){
    obem=document.getElementById("obem").value;
        if(obem==1) {
        document.calcForm.tolschina.options.length = 0;
        document.calcForm.tolschina.options[0] = new Option("Выбрать", "0", true, false);
        document.calcForm.tolschina.options[1] = new Option("1.5 мм.", "2450", false, false);
        document.calcForm.tolschina.options[2] = new Option("2 мм.", "2750", false, false);
}
        else if(obem==2) {
        document.calcForm.tolschina.options.length = 0;
        document.calcForm.tolschina.options[0] = new Option("Выбрать", "0", true, false);
        document.calcForm.tolschina.options[1] = new Option("1.5 мм.", "2750", false, false);
        document.calcForm.tolschina.options[2] = new Option("2 мм.", "2950", false, false);
}
        else(obem==3) {
        document.calcForm.tolschina.options.length = 0;
        document.calcForm.tolschina.options[0] = new Option("Выбрать", "0", true, false);
        document.calcForm.tolschina.options[1] = new Option("1.5 мм.", "2850", false, false);
        document.calcForm.tolschina.options[2] = new Option("2 мм.", "3050", false, false);
        }
}

</script>

<table width="100%">
<tr><td align="center">
<img src="../images/calc/18.jpg" width="150" height="187"><br /><br />
<span style="font-weight: bold; font-size: 20px;">Объём</span> <br />
<select name="obem" id="obem" onchange="izmen()" class="calc">
<option value="0">Выбрать</option>
<option value="1">0.5</option>
<option value="2">0.63</option>
<option value="3">0.71</option>
</select>
</td><td align="center">
<img src="../images/calc/37.jpg" width="150" height="187"><br /><br />
<span style="font-weight: bold; font-size: 20px;">Толщина</span><br />
<select name="tolschina" id="tolschina" class="calc" form="calcForm">
<option value="0">Выбрать</option>
</select>
</td><td align="center">
<img src="../images/calc/57.jpg" width="150" height="187"><br /><br />
<span style="font-weight: bold; font-size: 20px;">Крышка</span> <br />
<select name="krishka" id="krishka" class="calc">
<option value="0">Нет</option>
<option value="600">0.5 мм.</option>
<option value="700">0.63 мм.</option>
<option value="700">0.71 мм.</option>
</select>
</td><td align="center">
<img src="../images/calc/59.jpg" width="150" height="187"><br /><br />
<span style="font-weight: bold; font-size: 20px;">Колёса</span> <br />
<select name="koleso" id="koleso" class="calc">
<option value="0">Нет</option>
<option value="950">100 мм.</option>
<option value="1100">125 мм.</option>
<option value="1900">160 мм.</option>
</select>
</td><td align="center">
<img src="../images/calc/42.jpg" width="150" height="187"><br /><br />
<span style="font-weight: bold; font-size: 20px;">Количество</span> <br />
<select name="kolvo" id="kolvo" class="calc">
<option value="0">Выбрать</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
</select>
</td></tr>
</table>
<br /><br />
<div id="podschet"><input type="button" class="raschet" onclick="calcCost()" value="Рассчитать" /></div><br /><br />
<div id="result">
Цена: <b>{itog} руб.</b>
</div><!---#result--->
</form>

Формула:
Код
itog=({tolschina}+{krishka}+{koleso})*{kolvo}

Заранее благодарен!
*

Pazys

  • Завсегдатай
  • 1738
  • 241 / 4
  • <a>А где я ошибся-то?</b>
Дайте лучше ссылку.
Ишак меня нюхал ...
Если помог - плюсуйте в карму.
*

zeus07

  • Давно я тут
  • 723
  • 9 / 0
Дайте лучше ссылку.

да, точно, что-то не подумал. Сайт: http://komtag.ru/calc
*

Pazys

  • Завсегдатай
  • 1738
  • 241 / 4
  • <a>А где я ошибся-то?</b>
Ишак меня нюхал ...
Если помог - плюсуйте в карму.
*

zeus07

  • Давно я тут
  • 723
  • 9 / 0
решение, читайте комментарии в CSS блоке

Скопировал прямо оттуда, но так и не заработало, селект не заполняется значениями
*

Pazys

  • Завсегдатай
  • 1738
  • 241 / 4
  • <a>А где я ошибся-то?</b>
Скопировал прямо оттуда, но так и не заработало, селект не заполняется значениями

У меня работает - значит код верный, ищите у вас ошибки в других местах, например:

Код: javascript
function look(type){
param=document.getElementById(type);
if(param.style.display == "none")
param.style.display = "block";
else
param.style.display = "none"
}
Код: javascript
function look(type){
param=document.getElementById("type");
if(param.style.display == "none")
{param.style.display = "block";}
else
{param.style.display = "none"}
}
Ишак меня нюхал ...
Если помог - плюсуйте в карму.
*

zeus07

  • Давно я тут
  • 723
  • 9 / 0
У меня работает - значит код верный, ищите у вас ошибки в других местах, например:

Код: javascript
function look(type){
param=document.getElementById(type);
if(param.style.display == "none")
param.style.display = "block";
else
param.style.display = "none"
}
Код: javascript
function look(type){
param=document.getElementById("type");
if(param.style.display == "none")
{param.style.display = "block";}
else
{param.style.display = "none"}
}


И даже после этого не заполняется....
*

alexj69

  • Захожу иногда
  • 244
  • 28 / 0
  • Думать надо!!!
Вот рабочий вариант вашего калькулятора
Спойлер
[свернуть]
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

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

Автор DelaShop

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

Автор osobist

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

Автор DelaShop

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

Автор DelaShop

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