MODX. Ориентирование в дереве ресурсов с помощью сниппета pdoField
Опубликовано: 25 Ноября 2019
Компонент pdoField создан для вывода любого поля указанного ресурса или его родителя, включая ТВ параметры. Он объединил в себе возможности getResourceField и UltimateParent. Но помимо возможности вывода полей обладает и куда более интересным функционалом — возможностью ориентироваться в уровнях каталога.
Например, если необходимо настроить вывод информации в зависимости от того, в каком каталоге находится ресурс на 3 уровне вложенности:
{set $desired = id искомого каталога}
{if '!pdofield' | snippet : [
'topLevel' => 3,
'field'=>'id',
'ultimate'=>'1'] == $desired}
Выводим информацию
{/if}
Или, к примеру, можно проверить входит ли алиас родителя на 3 уровне вложенности в массив неких значений
{if '!pdofield' | snippet : [
'topLevel' => 3,
'field'=>'alias',
'ultimate'=>'1'] not in list $key_aliases}
Выводим информацию
{/if}
Параметр ultimate включает режим, при котором &top и &topLevel работают в точности как в сниппете UltimateParent.
Документация сниппета pdoField
pdoField
pdoField
Этот сниппет одновременно обладает возможностями getResourceField и UltimateParent, то есть выводит любое поле указанного ресурса или его родителя, включая ТВ параметры.
Отличием от аналогов является работа с документами любых контекстов и возможность указать дополнительные параметры при выборке, что позволяет не выводить поля, например, скрытых ресурсов. Так же с помощью указания параметра &class можно получить поле любого объекта MODX. Может быть вызван как фильтр вывода.
Параметры
Принимает общие параметры выборки и результатов pdoTools и некоторые свои:
Параметр | По умолчанию | Описание |
---|---|---|
&id | Текущий документ | Идентификатор ресурса. |
&field | pagetitle |
Поле ресурса. |
&top | Выбирает родителя указанного &id на уровне &top. | |
&topLevel | Выбирает родителя указанного &id на уровне &topLevel от корня контекста. | |
&default | Указывает поле ресурса, которое вернётся, если &field окажется пуст. Более быстрый аналог фильтра :default= | |
&output | Указывает строку, которая вернётся, если и &default, и &field оказались пусты. | |
&toPlaceholder | Если не пусто, сниппет сохранит все данные в плейсхолдер с этим именем, вместо вывода не экран. |
Если указаны &top или &topLevel, а &context нет, то для его определения будет сделан дополнительный запрос в базу данных.
Работу с чанками сниппет не поддерживает, так как возвращает значение только одного поля.
Примеры
Сниппет может быть вызван как фильтр вывода:
[[*id:pdofield=`longtitle`]]
[[*id:pdofield=`longtitle`]]
При этом вы можете указывать параметры JSON массивом. Например, выбор второго родителя от ресурса и вывод его «longtitle»:
[[*id:pdofield=`{"top":2,"field":"longtitle"}`]]
[[*id:pdofield=`{"top":2,"field":"longtitle"}`]]
Но лучше использовать обычный вызов - он и быстрее, и удобнее:
[[pdoField?
&id=`[[*id]]`
&field=`longtitle`
&top=`2`
]]
[[pdoField?
&id=`[[*id]]`
&field=`longtitle`
&top=`2`
]]