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

Театрал

  • Захожу иногда
  • 232
  • 7 / 0
Здравствуйте!

Использую WidgetKit, следовательно у меня подключен Uikit framework со всеми своими плюсами и минусами.

Нужно вывести iframe в Lightbox.

У Uikit есть свой lightbox:  http://getuikit.com/docs/lightbox.html, всем он мне нравится, НО он может выводить либо скрытые блоки, либо видео и картинки, т.е. фрейм в него (по внешней или внутренней ссылке) не запихать... В скрытом блоке iframe выводить - неправильно.

Решение я нашёл, вот оно: https://gist.github.com/malles/423a1eb266f169d01edc

Оно работает, прошу помощи в двух вопросах:
  • Скрипт работает если его разместить текстом непосредственно в index.php шаблона, я бы хотел подключить отдельный файл.js, но так не срабатывает, наверное что-то нужно изменить. Подскажите как!
  • В скрипте прописана ширина и высота открывающегося фрейма. Скажите, а возможно ли эти параметры передать прям в ссылке, и как это сделать.

P.S. О существовании таких плагинов как "modals" от nonumber, я знаю. Но мне кажется и одного WidgetKit много, я его и установил, так сказать, для универсальности.

На всякий случай, вот сам скрипт:

Код
(function () {

    "use strict";

    UIkit.on('beforeready.uk.dom', function () {

        UIkit.plugin("lightbox", "iframe", {

            init: function (lightbox) {

                lightbox.on("showitem.uk.lightbox", function (e, data) {

                    var resolve = function (source, width, height) {

                        data.meta = {
                            'content': '<iframe class="uk-responsive-width" src="' + source + '" width="' + width + '" height="' + height + '"></iframe>',
                            'width': width,
                            'height': height
                        };

                        data.type = 'iframe';

                        data.promise.resolve();
                    };

                    if (data.type === 'iframe' || data.source.match(/\.(html|php)$/)) {
                        resolve(data.source, (lightbox.options.width || 800), (lightbox.options.height || 600));
                    }
                });

            }
        });
    });
}());

Работает со ссылкой такого вида:
Код
<a class="uk-button" href="http://getuikit.com" data-uk-lightbox data-lightbox-type="iframe">Iframe lightbox</a>
« Последнее редактирование: 23.01.2016, 02:39:17 от Театрал »
*

vipiusss

  • Гуру
  • 5739
  • 344 / 11
  • Скайп: renor_
Re: Помогите разобраться со скриптом
« Ответ #1 : 23.01.2016, 01:54:36 »
"Нужно вывести iframe в Lightbox."

Так в JCE Box есть сразу вывод?!
И там ширина и высота заявлена и прописывается для каждой ссылки.
Модалка там уже готовая, я сегодня лично делал!

Что не так у вас? зачем скрипты, если они в плагине и движке?

///

Напишите точное ТЗ , что вам надо.
Миграция, установка, обновление версий Joomla  |  Создание сайтов "под ключ"  |  Эксклюзивные заглушки "offline"  |  Работа с "напильником" над шаблонами и расширениями
*

Театрал

  • Захожу иногда
  • 232
  • 7 / 0
Re: Помогите разобраться со скриптом
« Ответ #2 : 23.01.2016, 02:33:05 »
Так в JCE Box есть сразу вывод!

Дело в том, что я хотел ограничиться минимальным набором: Joomla, свой простенький шаблон, WidgetKit (как универсальная вещь для слайдеров скроллеров, галлереи и подобного).

Что в общем-то и получилось. Модальные окна от WidgetKit уже использую для галереи например.
Для полного счастья не хватило только фрейма в модальном окне.
Просто не хочу под каждую новую задачу устанавливать определённое расширение, которые потянут свои скрипты и стили. Стандартного TinyMCE мне вполне хватает.

Ну как уже точнее написать...
1. Данный скрипт у меня заработал, но только если вставляю в Index.php прям текстом в тегах <script>, хочу вынести в отдельный файл JS, но тогда он не работает. Наверное для этого нужно какие-то правки внести, спрашиваю какие.
2. Когда фрейм открывается в Lightbox, у него размеры те, что прописаны в скрипте, я бы хотел что бы эти параметну можно было указывать прямо в ссылке. Как-нибудь вот так:
Код
<a class="uk-button" href="http://getuikit.com" data-uk-lightbox data-lightbox-type="iframe" width="400" height="200">Iframe lightbox</a>
« Последнее редактирование: 23.01.2016, 02:40:42 от Театрал »
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Re: Помогите разобраться со скриптом
« Ответ #3 : 23.01.2016, 02:40:27 »
1. судя по коду, прекрасно работает во внешнем файле. вероятно вы вызываете функцию до того когда загружен/определен UIkit или еще не готова DOM. загружайте после основной библиотеки и/или используйте jQuery.ready
2. судя по коду, точно также как если бы вы задавали ширину и высоту lighbox, но выводили в нем не iframe, а например скрытый блок. видимо это не width="400" height="200" а как то иначе для этого lighbox
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

Театрал

  • Захожу иногда
  • 232
  • 7 / 0
Re: Помогите разобраться со скриптом
« Ответ #4 : 23.01.2016, 03:16:29 »
1. вероятно вы вызываете функцию до того когда загружен/определен UIkit.

Точно, спасибо! как-то не посмотрел даже...

Цитировать
2. точно также как если бы вы задавали ширину и высоту lighbox, но выводили в нем не iframe, а например скрытый блок.

Наверное размер самого lighbox-а вообще не регулируется... Т.е. он будет такого размера как его содержимое, если оно в пределах области просмотра (если больше монитора, то уменьшается)...

Вот страница компонента: http://getuikit.com/docs/lightbox.html, тут тесты: http://getuikit.com/tests/components/lightbox.html. Там такое не описано и не используется.

Получается, что только через высоту и ширину iframe можно получить нужный размер. А как это передать через скрипт, не поможете?
*

vipiusss

  • Гуру
  • 5739
  • 344 / 11
  • Скайп: renor_
Re: Помогите разобраться со скриптом
« Ответ #5 : 23.01.2016, 09:14:26 »
 в ручную, скрипт так не переделаете.
и повторюсь: боксом пользуйтесь и нормальным редактором.
когда поймёте, что он лучше-пропадут ошибки ваши.
Миграция, установка, обновление версий Joomla  |  Создание сайтов "под ключ"  |  Эксклюзивные заглушки "offline"  |  Работа с "напильником" над шаблонами и расширениями
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Re: Помогите разобраться со скриптом
« Ответ #6 : 23.01.2016, 11:23:58 »
Наверное размер самого lighbox-а вообще не регулируется...

должен. у вас в коде

Код: javascript
lightbox.options.width || 800

т.е. если определена lightbox.options.width, то использовать ее, иначе 800. сделайте вывод

Цитировать
console.log(lightbox);
resolve(data.source, (lightbox.options.width || 800), (lightbox.options.height || 600));

и посмотрите в консоли что это за объект
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

Театрал

  • Захожу иногда
  • 232
  • 7 / 0
Re: Помогите разобраться со скриптом
« Ответ #7 : 24.01.2016, 04:55:00 »
должен...

Действительно.

Консоль.лог я подключил, правда понял там не много...
Но и этого хватило, чтобы допёрло, что  через ссылку для у lighbox-ов можно передать атрибут с опциями: data-uk-lightbox="{...'}", где можно объединить их в группу, указать время анимации, добавить стрелки.

Как оказалось, туда же можно добавить ширину и высоту iframe для этого скрипта.

Dmitry_stas, выражаю вам огромную благодарность! Без вас я бы не разобрался!
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Re: Помогите разобраться со скриптом
« Ответ #8 : 24.01.2016, 12:13:09 »
Действительно.
красота :) недокументированная возможность?
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

vipiusss

  • Гуру
  • 5739
  • 344 / 11
  • Скайп: renor_
Re: Помогите разобраться со скриптом
« Ответ #9 : 24.01.2016, 16:13:38 »
красота :) недокументированная возможность?
Дмитрий дельный! И я выражаю просто так свой "плюс" В карму добавлю!
Миграция, установка, обновление версий Joomla  |  Создание сайтов "под ключ"  |  Эксклюзивные заглушки "offline"  |  Работа с "напильником" над шаблонами и расширениями
*

afon

  • Осваиваюсь на форуме
  • 12
  • 0 / 0
Re: Помогите разобраться со скриптом
« Ответ #10 : 25.10.2017, 22:32:27 »
Здравствуйте!

Использую WidgetKit, следовательно у меня подключен Uikit framework со всеми своими плюсами и минусами.

Нужно вывести iframe в Lightbox.

У Uikit есть свой lightbox:  http://getuikit.com/docs/lightbox.html, всем он мне нравится, НО он может выводить либо скрытые блоки, либо видео и картинки, т.е. фрейм в него (по внешней или внутренней ссылке) не запихать... В скрытом блоке iframe выводить - неправильно.

Решение я нашёл, вот оно: https://gist.github.com/malles/423a1eb266f169d01edc

Оно работает, прошу помощи в двух вопросах:
  • Скрипт работает если его разместить текстом непосредственно в index.php шаблона, я бы хотел подключить отдельный файл.js, но так не срабатывает, наверное что-то нужно изменить. Подскажите как!
  • В скрипте прописана ширина и высота открывающегося фрейма. Скажите, а возможно ли эти параметры передать прям в ссылке, и как это сделать.

P.S. О существовании таких плагинов как "modals" от nonumber, я знаю. Но мне кажется и одного WidgetKit много, я его и установил, так сказать, для универсальности.

На всякий случай, вот сам скрипт:

Код
(function () {

    "use strict";

    UIkit.on('beforeready.uk.dom', function () {

        UIkit.plugin("lightbox", "iframe", {

            init: function (lightbox) {

                lightbox.on("showitem.uk.lightbox", function (e, data) {

                    var resolve = function (source, width, height) {

                        data.meta = {
                            'content': '<iframe class="uk-responsive-width" src="' + source + '" width="' + width + '" height="' + height + '"></iframe>',
                            'width': width,
                            'height': height
                        };

                        data.type = 'iframe';

                        data.promise.resolve();
                    };

                    if (data.type === 'iframe' || data.source.match(/\.(html|php)$/)) {
                        resolve(data.source, (lightbox.options.width || 800), (lightbox.options.height || 600));
                    }
                });

            }
        });
    });
}());

Работает со ссылкой такого вида:
Код
<a class="uk-button" href="http://getuikit.com" data-uk-lightbox data-lightbox-type="iframe">Iframe lightbox</a>
Смотри
data-lightbox-type="iframe"
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Не могу разобраться как в админке заставить работать свой плагин

Автор kkmspb

Ответов: 3
Просмотров: 1708
Последний ответ 02.09.2024, 11:35:25
от kkmspb
Объединение Joomla со сторонним скриптом доски объявлений

Автор Room

Ответов: 3
Просмотров: 1047
Последний ответ 17.09.2018, 12:57:29
от ProtectYourSite
Помогите с опросником sexy polling - по моему не учитывает голоса с одинаковым айпи

Автор suor

Ответов: 2
Просмотров: 1897
Последний ответ 29.11.2017, 08:53:27
от Invictus
Помогите не могу зайти на сайт!

Автор Avtobuz

Ответов: 5
Просмотров: 1508
Последний ответ 09.02.2017, 15:03:15
от SeBun
eventbooking - не могу разобраться с кодом

Автор volk358

Ответов: 1
Просмотров: 1277
Последний ответ 01.02.2013, 15:08:41
от Immortal_pony