Создание пользовательского типа поля Form в Joomla 5 на примере Modal Select

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

В панели администратора Joomla встречаются поля, которые нужно заполнить данными из других компонентов: указать материал, пункт меню, контакт, товар и т.д. Обычно такие поля оформляются в виде выпадающего списка select option, могут оформляться в виде input type="text" с datalist, но есть и удобные поля, показывающие список искомых сущностей, с фильтрацией, поиском, пагинацией и т.д.

Все мы видели эти поля в действии при выборе материала в пункте меню типа "Материалы - Материал", "Контакты - Контакт", или при создании алиаса (псевдонима) пункта меню - "Системные - Псевдоним". Однако напомним себе как они выглядят.

Модальное окно выбора материала.

На видео - утро, компьютер ещё не проснулся и локальный сервер чуть тупит ))

А это модальное окно выбора контакта.

Возможности поля выбора в модальном окне в Joomla

Давайте пристально посмотрим на эти поля - что именно они позволяют сделать. Мы где-то глубоко внутри понимаем, что основная работа этого поля - получить id выбираемой сущности и поместить это id в текстовое поле. Но на экране мы видим нечто другое - вместо цифры мы видим название материала или контакта. Это приятно и удобно. Не нужно вспоминать название материала с id 1452704. Также, на видео отчётливо видно, что если в поле уже есть значение - появляется кнопка "очистить". Она сбрасывает значение поля и позволяет снова нажать на кнопку "выбрать".

В некоторых случаях у нас есть возможность создать выбранный тип сущности - материал, контакт и т.д. прямо в процессе создания пункта меню. Эта кнопка работает с учётом ACL - разделения прав доступа в Joomla.

Представьте, Вы собираете сайт и создаёте страницу "Контакты". Если у Вас не куча филиалов с разветвлённой структурой, то это как правило обычный материал Joomla в категории "Без категории". И в нём уже все контакты. В бородатые времена нужно было сначала создать материал, а потом уже идти в пункты меню и делать на него ссылку. Сейчас так можно не делать.

И если в поле уже есть значение, то в некоторых же случаях есть возможность редактировать выбранную сущность (материал, пункт меню и т.д.) прямо в процессе создания пункта меню.

Итак, с помощью поля выбора в модальном окне мы можем:

  • выбрать

  • создать

  • редактировать

  • очистить

Это то, что перед глазами. Но в недрах Joomla есть ещё любопытный параметр urlCheckin, который позволяет отправлять выбранное значение на указанный в поле url. Стоит заметить, что этот функционал в Joomla постепенно развивался с довольно давних пор. Однако, отдельный универсальный тип поля, который можно использовать для своих нужд появился только в Joomla 5. Его нет даже в Joomla 4.

Как устроены поля конструктора Form интерфейса панели администратора Joomla?

Раньше этот конструктор назывался JForm . Я буду предполагать, что не все мои читатели имеют в руках такой инструмент разработки как IDE - среду разработки - а-ля PHP Storm или VS Code, поэтому постараюсь давать дополнительные ориентиры для навигации по кодовой базе.

В Joomla логика разделена от представления (собственно вывода HTML), поэтому исследовать мы будем одновременно в нескольких местах.

Логика - класс Form

Логика - это класс Form. В Joomla 5 файлы классов Form находятся в libraries/src/Form. Эти файлы мы исследуем для того, чтобы понять саму логику, что и как происходит с данными и как с этим работать.

Если кратко, то конструктор Form получает XML с описанием полей. считывает данные (тип поля, кастомный класс поля из атрибута addfieldprefix, если есть и т.д.), загружает с помощью FormHelper нужный класс поля. Если у поля есть некие правила фильтрации выводимых данных - используется класс FormRule - вспомните поля Joomla типа filelist, где можно указать параметры фильтрации и выбрать, например, только php или только css файлы.

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

Источник: https://habr.com/ru/articles/776852/


Интересные статьи

Интересные статьи

Рекомендательные системы являются неотъемлемой частью современных веб-сайтов. Они играют ключевую роль в улучшении пользовательского опыта, увеличении удержания пользователей и повышении конверсии. Эф...
Однажды меня попросили провести ревью и рефакторинг одного telegram-бота. Увидев файл размером 2000 строк, рассчитанный только на обработку разных меню я понял, что это требует унификации и общих подх...
Microsoft Power Platform - это линейка продуктов, интегрированных между собой, предназначенных для бизнес-аналитики, автоматизации бизнес-процессов, написания приложений на лоу-код языке, либо использ...
В этой небольшой статье я хочу кратко описать содержимое лекции №4 - Создание продукта, общение с клиентами и рост стартапа из курса по стартапам и бизнесу от Стэнфордско...
От переводчика. Привет! Про Kotlin есть стереотип, будто бы это язык для разработки только под Android. На самом деле, это совсем не так: язык официально поддерживает несколько платформ ...