Эта небольшая статья рассказывает о том, как происходит рендеринг пользовательских полей "под капотом" Joomla. Информация будет Вам полезна для создания переопределений и вёрстки своего вывода полей в Ваших новых проектах. А также упростит поиск и поддержку сайтов на Joomla, пришедших от других разработчиков.

Перевод статьи франкоязычного Joomla-разработчика Olivier Buisard.

Рендер пользовательских полей Joomla происходит в 3 этапа:

  • 1-й этап: создаётся layout, который собирает все поля вместе и создаёт общий для всех вывод.

  • 2-й этап: создаётся layout, в котором определяется как отображается каждое отдельное поле (отображать ли label поля и т.д.)

  • 3-й этап: создаётся layout, который определяет вывод значения конкретного поля.

Этапы рендера пользовательских полей в Joomla
Этапы рендера пользовательских полей в Joomla

Каждый компонент может отображать поля по-своему. В ядре Joomla компонент "Контакты" является единственным компонентом, который имеет определенные макеты для отображения полей (в частности, он обрабатывает поля в электронных письмах).

Порядок рендера всех пользовательских полей

Joomla ищет макеты рендера всех пользовательских полей в следующем порядке:

  • Есть ли файл templates/[template name]/html/layouts/[component name]/fields/render.php , переопределяющий макет вывода полей для конкретного компонента? Да - используем его.

  • Нет? Есть ли файл components/[component name]/layouts/fields/render.php в папке компонента? Да - используем его.

  • Нет? Есть ли файл templates/[template name]/html/layouts/com_fields/fields/render.php , переопределяющий вывод полей для com_fields? Да - используем его.

  • Нет? Используем файл components/com_fields/layouts/fields/render.php

Можно скопировать, переименовать и переопределить файл render.php , чтобы появилась возможность вручную выбирать, какой файл рендеринга использовать, но это должно быть сделано с помощью кода в расширениях.

Следующий код

FieldsHelper::render('com_content.article', 'fields.render', ['item' => …, 'context' => 'com_content.article', 'fields' => …]);

отобразит все поля для материала с помощью файла layouts/fields/render.php. А этот код

FieldsHelper::render('com_content.article', 'fields.myoverride', ['item' => …, 'context' => 'com_content.article', 'fields' => …]);

отобразит все поля для материала с помощью layouts/fields/myoverride.php.

Использование плагина контента "Контент - Поля"

Плагин для отображения настраиваемого поля в содержимом сайта, которое может быть вставлено в область редактора с помощью кнопки Поле или с использованием следующего синтаксиса:

  •  позволит отобразить все поля группы полей с ID 2.

  •  (вместо точного id - символ звёздочки) позволит отобразить все группы полей

Порядок рендера конкретного пользовательского поля Joomla

Механизм поиска файлов макетов вывода каждого отдельного поля такой же, как и для групп полей.

  • Есть ли файл templates/[template name]/html/layouts/[component name]/field/render.php, переопределяющий макет вывода полей для конкретного компонента? Да - используем его.

  • Нет? Есть ли файл components/[component name]/layouts/field/render.php в папке компонента? Да - используем его.

  • Нет? Есть ли файл переопределения для com_fields - templates/[template name]/html/layouts/com_fields/field/render.php? Да - используем его.

  • Нет? Используем components/com_fields/layouts/field/render.php

Можно создать несколько переопределений файла components/com_fields/layouts/field/render.php и иметь возможность выбрать, какой из них использовать, в настройках поля панели администратора (вкладка опции).

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

Если Вы выбрали собственный макет, Joomla отобразит поле с Вашей вёрсткой.

"Use default (по умолчанию)" означает, что для рендера будет использован файл render.php.

Не создавайте переопределения, если вы можете получить тот же результат, просто используя CSS. Такое решение будет легче поддерживать в дальнейшем.

Использование плагина контента "Контент - Поля"

Вы можете использовать шорт-код {field [id]} , где [id] - id поля. Макет вывода используется по умолчанию - layouts/field/render.php.

Шорт-код  позволит отобразить поле с ID 2, которое использует альтернативный макет foo.

Отображение значения пользовательского поля Joomla

Каждое пользовательское поле реализовано с помощью плагина, находящегося в директории plugins/fields. Макеты вывода плагинов находятся в папке tmpl. Например, для плагина поля text макеты вывода находятся в plugins/fields/text/tmpl. Макет вывода по умолчанию имеет такое же имя файла, как и сам плагин. Для плагина поля "text" файл макета вывода будет называться text.php.

Этот файл тоже можно переопределить. Можно сделать или вручную или с помощью вкладки "Создание переопределений" в настройках шаблона (не стиля шаблона).

Плагины полей в настройках шаблона
Плагины полей в настройках шаблона

skrinshot nastroek shablona joomla dlyz spzdaniya pereporpedelenii

В коде значения полей обычно получаются FieldsHelper::getFields($context, $item, true); , где

  • $context - контекст компонента, в котором должно быть выбрано поле (например, 'com_content.article').

  • $item - материал, категория и т.д., для которого должно быть получено значение поля.

  • true  указывает, что значение поля должно быть обработано плагином и вернуть значение вместе с HTML-вёрсткой из макета. Если указано false, то вернется "голое" значение поля, введённое в админке.

Толкачев Сергей Юрьевич
Толкачев Сергей Юрьевич

Joomla-разработчик. Контрибьютер ядра Joomla. Один из ведущих Telegram-канала русскоязычного Joomla-сообщества JoomlaFeed, один из модераторов чата русскоязычного Joomla-сообщества. Мои расширения в официальном маркетплейсе расширений Joomla - Joomla Extensions Directory. Имею публикации в официальном журнале международного Joomla-сообщества - Joomla Community Magazine.

Муж. Отец 3 детей.

Россия, Саратов.

Расширения Joomla WebTolk

90 Всего расширений
11 Категорий
399 Выпущено версий
386884 Всего скачиваний
Корзина
Корзина пуста