Пользовательские поля Joomla содержат самую разную дополнительную к основным сущностям информацию. И отображает её нужно бывает в самых разных местах. Легко работать с полями, когда они есть в объекте материала или контакта. Но когда их нет - их нужно получить. Для этого существует класс \Joomla\Component\Fields\Administrator\Helper\FieldsHelper.

У этого класса среди прочих самым ходовым, наверное, является метод getFields(). С его помощью мы получаем списки полей и, если нужно, их значений для конкретного контекста.

Контекст в коде Joomla
Контекст в коде Joomla - это отличительный признак вида <com_component>.<entity>. Например, com_content.articles. По нему мы понимаем, что работаем с материалами Joomla и конкретно со статьями.
<?php
/**
 * @param   string   $context    Контекст для поиска полей
 * @param   object|array|null  $item объект сущности, для которой ищем поля.
 * @param   int|bool $prepareValue  (если int - определяем где показывать значения): 1 - после заголовка, 2 - до основного контента, 3 - после контента, 0 - OFF. Если НЕ false и НЕ 0 - ПОЛУЧАЕМ ПОЛЯ И ЗНАЧЕНИЯ ПОЛЕЙ
 * @param   ?array             $valuesToOverride     значения для переопределения
 * @param   bool               $includeSubformFields Включать ли поля, помеченные, что они только для сабформы?
     *
     * @return  array
     *
     * @throws \Exception
     * @since   3.7.0
     */
    public static function getFields()

Таким образом мы в коде нередко видим такие вещи:

<?php
use Joomla\Component\Fields\Administrator\Helper\FieldsHelper; 

// Получили поля. Всё ок.
$article->jcfields = FieldsHelper::getFields('com_content.article', $article, true);

Но поводом для написания этого поста стало несколько другое. В последнем примере кода $article - это объект материала, для получения которого мы создаём сначала модель, в модели создаётся объект базы данных... Итого это всё довольно тяжеловесно.

А если нам нужно просто получить поля со значениями, но как-то полегче? Для этого достаточно передать вместо $article массив или stdClass с ключом id.

<?php
use Joomla\Component\Fields\Administrator\Helper\FieldsHelper;

// Получили поля. Всё ок.
$fields = FieldsHelper::getFields('com_content.article', [ 'id' => 159 ], true);

Итого мы получили все поля (с учётом прав доступа и т.д.) для материала с id 159, но при этом сэкономили ресурсы сервера.

 

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

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

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

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

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

91 Всего расширений
11 Категорий
424 Выпущено версий
422664 Всего скачиваний
Корзина
Корзина пуста