Довольно часто требуется получить и вывести поля родителей и сегодня мы разберемся в том, как в MODX сделать это при помощи сниппета pdoField, который входит в состав компонента PdoTools. Данный сниппет в отличии от его аналогов UltimateParent и getResourceField имеет все их возможностями — выводит как любые поля указанного документа или его родителя, так и их переменные (TV параметры). Ко всему этому он может работать с документами в любых контекстах и при выборке есть можно указать доп. параметры, это позволяет к примеру: можно у скрытых ресурсов не выводить поля. А, если указать параметр &class, то возможно получить любое поле объекта Модекс. И pdoField можно вызывать как фильтр вывода.
Параметры
pdoField принимает основные параметры компонента pdoTools (и немного своих:
Параметр | По умолчанию | Описание |
---|---|---|
&id | Текущий документ | Идентификатор ресурса. |
&field | pagetitle | Поле ресурса. |
&top | Выбирает родителя указанного &id на уровне &top. | |
&topLevel | Выбирает родителя указанного &id на уровне &topLevel от корня контекста. | |
&default | Указывает поле ресурса, которое вернётся, если &field окажется пуст. Более быстрый аналог фильтра :default= | |
&output | Указывает строку, которая вернётся, если и &default, и &field оказались пусты. | |
&toPlaceholder | Если не пусто, сниппет сохранит все данные в плейсхолдер с этим именем, вместо вывода не экран. |
Внимание. pdoField не поддерживает работу с чанками.
Стоит обратить внимание: Если указаны параметры &topLevel или &top, а параметр &context нет, тогда будет сделан доп. запрос в БД (чтобы определить контекст).
Примеры
Вызываем как фильтр вывода:
[[*id:pdofield=`pagetitle`]]
Так же можно указывать параметры при помощи JSON массива . Например, выбираем 2-го родителя ресурса и выводим его «pagetitle»:
[[*id:pdofield=`{"top":2,"field":"pagetitle"}`]]
или тоже самое обычным вызовом (рекомендуется, так как это удобнее и быстрее):
[[pdoField? &id=`[[*id]]` &field=`longtitle` &top=`2`]]
Тоже самое на fenom:
{'!pdoField' | snippet : [
'id' => $_modx->resource.id,
'field' => 'longtitle',
'top' => '2'
]}
Здравствуйте, можете пожалуйста написать последний вызов на феном?
Здравствуйте. Написал.