Новости Joomla

👩‍💻 События плагинов и порядок их срабатывания при работе с пользовательскими полями Joomla и использовании FieldsHelper.

👩‍💻 События плагинов и порядок их срабатывания при работе с пользовательскими полями Joomla и использовании FieldsHelper.

В процессе работы с Joomla бывает необходимо работать с пользовательским интерфейсом более тонко, чем обычно. Все формы Joomla состоят из стандартных полей, содержанием, стилем отображения, состоянием (включено/выключено, доступно для редактирования или нет и т.д.) можно управлять с помощью плагинов. Да и для нестандартных проектов хорошей практикой является создание одного системного или нескольких плагинов групп "под проект", в которых храниться весь "нестандарт".

В этой статье описаны все триггеры, которые вызываются через Event Dispatcher из administrator/components/com_fields/src/Helper/FieldsHelper.php, с привязкой к жизненному циклу (порядку этапов работы запроса), аргументам, изменяемым данным и дальнейшему распространению по Joomla. Это поможет вам работать с Joomla свободнее и не опасаясь при этом потерять изменения при очередном обновлении движка.

Подходы, описанные в статье, полезны в тех случаях, когда вы работаете с данными в com_fields - механизме создания и редактирования пользовательских полей ядра Joomla и при использовании FieldsHelper. Многие сторонние компоненты не используют эту возможность, поэтому данная статья будет полезна лишь частично.

🏆 Открыто голосование за Joomla в премии CMS Critic People’s Choice Awards 2025

🏆 Открыто голосование за Joomla в  премии CMS Critic People’s Choice Awards 2025

🗓 Голосование продлится до 27 февраля 2026 года.

👩‍💻 Проголосовать! 👩‍💻

Номинации, в которых можно проголосовать за Joomla:
⭐️ Best Free CMS
⭐️ Best Open Source CMS
⭐️ Best Enterprise CMS

Также в номинации Best e-Commerce Solution участвуют компоненты интернет-магазинов для Joomla:
⭐️ HikaShop
⭐️ Virtuemart

В номинации Best Website Builder оказались:
⭐️ YooTheme
⭐️ SP Page Builder

Что такое CMS Critic Awards?
С 2012 года премия CMS Critic Awards занимает особое место в сообществе систем управления контентом (CMS). Это единственный в своем роде сайт, который составляет рейтинг системы управления контентом и связанных с ними решений на рынке — от малого до крупного и подчеркивает их инновации и услуги.

Каждый год награда CMS Critic Awards присуждается одному победителю в различных отраслевых категориях, таких как: «Лучшая облачная CMS», «Лучший DXP», «Лучшая Headless CMS и других. Затем результаты оглашаются через СМИ вместе с выбором редакции CMS Critic.
В этом году премия вернулась к своим традициям и только TOP-5 движков по количеству номинаций попали в 2-й этап - голосование.

@joomlafeed

0 Пользователей и 1 Гость просматривают эту тему.
  • 7 Ответов
  • 1079 Просмотров
*

johnsnow91

  • Новичок
  • 6
  • 0 / 0
Добрый день! Я только начал разрабатывать плагин для Joomla и сложновато разобраться со структурой. В самой популярной статье по разработке на оф. сайте нет этой информации.

Мне необходимо добавить на страницу настроек плагина для способа доставки javascript и подключить AJAX. Как это можно сделать, если все настройки через XML работают? Есть какой-то специальный файл для подключения?
*

sivers

  • Живу я здесь
  • 2606
  • 361 / 0
Либо интегрировать тем же плагином (если он системный или контентный), или создавать свой тип поля, в котором будет реализовано подключение скрипта.
Второй способ не для новичка. Почитать можно тут:
http://joomla-book.ru/development/standard-parameter-types/creating-your-field-type
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

johnsnow91

  • Новичок
  • 6
  • 0 / 0
спасибо! Я для себя второй способ выбрал, но можете пояснить, как бы можно было добавить в первом способе скрипт так, чтобы он именно в настройках появился?
*

sivers

  • Живу я здесь
  • 2606
  • 361 / 0
но можете пояснить, как бы можно было добавить в первом способе скрипт так, чтобы он именно в настройках появился?
Конечно. В случае, если плагин принадлежит группе Content, достаточно использовать обработчик события onContentPrepareForm:
https://docs.joomla.org/Plugin/Events/Content#onContentPrepareForm
Он вызывается в момент подготовки формы к выводу на странице. А редактирование любого элемента, модуля, пункта меню, плагина - это ведь форма. В этом обработчике проверяете, что сейчас редактируется форма именно вашего плагина и подключаете свои скрипты стандартно через $doc->addScript().
Если же плагин системной группы, то подключить скрипт можно в обработчике события onBeforeCompileHead (подготовка к сборке <head>):
https://docs.joomla.org/Plugin/Events/System#onBeforeCompileHead
Только здесь вам придется проанализировать либо адресную строку, либо переданные в адресе параметры, чтоб узнать, что сейчас редактируется именно ваш плагин - ИД есть в конфиге конструктора плагина, все остальное из параметров ?option=com_plugins&view=plugin&layout=edit&extension_id=10022.
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

johnsnow91

  • Новичок
  • 6
  • 0 / 0
@sivers, Спасибо за развернутый ответ! Похоже, что мне придется оба метода использовать. А что делать после того, как уже определил что это страница настроек?
К примеру, вот я распарсил гет-параметры и определил, что это страница - настройки моего плагина:
Код
public function onBeforeCompileHead(){
        $head = JFactory::getDocument()->getHeadData();
        $getParams = new JInput($_GET);
.....
    }
нужно как-то передать скрипт, который, к примеру, лежит в папке с плагином. Как мне это сделать? Есть какой-то метод? Не могу в документации накопать ничего про подключение javascript.
Если с контентом всё понятно, это можно в шаблоне сделать, то в случае с такими файлами, не могу понять, как тут бэк и фронт взаимодействуют... Извиняюсь за, возможно, глупые вопросы, но мне просто на голову свалили задачу не разбираясь, видел я хоть раз Joomla внутри или нет.
*

sivers

  • Живу я здесь
  • 2606
  • 361 / 0
Как мне это сделать?
Да все стандартно в жумле:
Код
        $app = JFactory::getApplication();
        $doc = $app->getDocument();
        $doc->addScript('/js/myPluginScript.js');
Если у вас жс лежит в папке плагина, то все точно так же, только надо вычислить путь к папке плагина от корня сайта:
Код
...
$path = str_replace(JPATH_SITE, '', __DIR__);
$doc->addScript($path.'/myPluginScript.js');
Обычно пользуюсь первым вариантом, чтоб не палить лишний раз имя плагина и джумлу в исходном коде сайта. Но, если хочется сделать полноценный плагин, чтоб все его файлы были в нем, то можно второй вариант размещения жс.

ПС
Вместо $getParams = new JInput($_GET); можно использовать $option = $app->input->getCmd('option', ''); $id = $app->input->getInt('extension_id', 0); и т.д.
« Последнее редактирование: 22.05.2020, 16:34:37 от sivers »
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

johnsnow91

  • Новичок
  • 6
  • 0 / 0
Огромное спасибо!
Я вытащил символьный код плагина вот такой конструкцией:
$this->getVmPluginMethod($app->input->getCmd('cid')[0])->shipment_element  и проверил на соответствие, теперь скрипт подключается только на странице доставки.
Вот такой результат получился:
В основном классе плагина добавил метод:
Код
public function onBeforeCompileHead(){
        $app = new Application\CMSApplication();
        if($this->getVmPluginMethod($app->input->getCmd('cid')[0])->shipment_element == 'код плагина' &&
        $app->input->getCmd('view') == 'shipmentmethod' && $app->input->getCmd('task') == 'edit'){
            JHtml::_('jquery.framework');
            JHtml::script( JURI::root().'путь к файлу js в папке плагина');
        }
    }
Внутри файла js весь Jquery код придется писать через jQuery, видимо, из-а их фреймворка.
Пока ещё не определился, делать ли свой тип поля или на яваскрипте кнопку добавлять, посмотрю, как пойдет дальше работа.
Ещё раз, огромное спасибо за помощь! Без Вас бы точно не справился!
*

sivers

  • Живу я здесь
  • 2606
  • 361 / 0
Пожалуйста.
Но лучше перепишите ваше условие вот так:
Код
if($app->input->getCmd('view') == 'shipmentmethod' && $app->input->getCmd('task') == 'edit' && $this->getVmPluginMethod($app->input->getCmd('cid')[0])->shipment_element == 'код плагина'){
В этом случае, если view и task не совпадут, то дальнейшая проверка с getVmPluginMethod вообще выполняться не будет. Она ведь что-то из БД читает? Т.е. вы при каждом заходе на любую страницу читаете это из БД ради проверки. Если поменять местами, то такого не будет происходить.

При перемене мест слагаемых сумма меняется таки )
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Вставка видео со своего сервера через media manager

Автор goga_pgasovav

Ответов: 2
Просмотров: 1982
Последний ответ 27.03.2025, 14:51:43
от Akeksandr
Проблема вебвизором в Яндекс метрике при использовании плагина jch optimize

Автор polezniy

Ответов: 32
Просмотров: 5545
Последний ответ 01.03.2024, 10:26:31
от Vastriet
Получить текущий номер страницы плагина "Разрыв страницы" (pagebreak)

Автор sertlan

Ответов: 1
Просмотров: 1112
Последний ответ 12.06.2023, 18:14:09
от sertlan
Администрирую и редактирую сайт на CMS Joomla. Вопросы про настройки CMS

Автор admi5575

Ответов: 4
Просмотров: 1232
Последний ответ 10.05.2023, 09:02:29
от admi5575
ajax загрузка компонента на странице материала К2

Автор Divn

Ответов: 0
Просмотров: 1125
Последний ответ 13.01.2023, 15:05:52
от Divn