Оглавление

pdoField — сниппет выводит любое поле указанного ресурса или его родителя, включая TV параметры.

Отличием от аналогов является работа с документами любых контекстов и возможность указать дополнительные параметры при выборке, что позволяет не выводить поля, например, скрытых ресурсов. Так же с помощью указания параметра &class можно получить поле любого объекта MODx. Может быть вызван как фильтр вывода.

Параметры

Принимает общие параметры выборки и результатов pdoTools и некоторые свои:

Параметр По умолчанию Описание
&id Текущий документ Идентификатор ресурса.
&field pagetitle Поле ресурса.
&top Выбирает родителя указанного &id на уровне &top.
&topLevel Выбирает родителя указанного &id на уровне &topLevel от корня контекста.
&default Указывает поле ресурса, которое вернётся, если &field окажется пуст. Более быстрый аналог фильтра :default=.
&output Указывает строку, которая вернётся, если и &default, и &field оказались пусты.
&toPlaceholder Если не пусто, сниппет сохранит все данные в плейсхолдер с этим именем, вместо вывода не экран.

Если указаны &top или &topLevel, а &context нет, то для его определения будет сделан дополнительный запрос в базу данных.

Работу с чанками сниппет не поддерживает, так как возвращает значение только одного поля.

Примеры

Сниппет может быть вызван как фильтр вывода:

/* modParser */
[[*id:pdofield=`pagetitle`]]

/* pdoParser */
{$_modx->resource.pagetitle} // В щаблоне
{$id | resource: 'pagetitle'} // В чанке

На pdo парсере, показана альтернатива сниппету pdoField.

При этом вы можете указывать параметры JSON массивом. Например, выбор второго родителя от ресурса и вывод его «longtitle»:

/* modParser */
[[*id:pdofield=`{"top":2,"field":"longtitle"}`]]

Но лучше использовать обычный вызов — он и быстрее, и удобнее:

/* modParser */
[[pdoField?
    &id=`[[*id]]`
    &field=`pagetitle`
    &top=`2`
]]

/* pdoParser */
{$_modx->runSnippet('pdoField', [
    'id' => $id,
    'field' => 'pagetitle',
    'top' => 2
])}

При сохранении результата сниппета в плейсхолдер &toPlaceholder:

/* modParser */
[[pdoField?
    &id=`[[*id]]`
    &field=`pagetitle`
    &top=`2`
    &toPlaceholder=`placeholderName`
]]

// Получаем результат работы сниппета из плейсхолдера
[[+placeholderName]]

/* pdoParser */
{$_modx->runSnippet('pdoField', [
'id' => $id,
'field' => 'pagetitle',
'top' => 2,
'toPlaceholder' => 'placeholderName',
])}

// Получаем результат работы сниппета из плейсхолдера
{var $placeholderName = $_modx->getPlaceholder('placeholderName')}
{$placeholderName}

Если вы используете pdoParser, то для начала необходимо получить значение плейсхолдера.