Получение полей родителя MODX

Каждую неделю меня спрашивают: Как получить поля родителя в MODX Revolution. Есть несколько способов, давайте рассмотрим несколько приёмов.

1. Сниппет getResourceField

    устанавливаем из репозитория

    минимальный вызов: [[getResourceField]]

Параметры сниппета getResourceField

Название
Описание
По-умолчанию
id
ИД ресурса для получения поля.
$modx->resource->get('id')
field
Поле или ТВ, которое нужно получить.
pagetitle
isTV
Когда значение 1 или true, то подразумевается, что поле - это ТВ.
false
processTV
Когда значение 1 или true, то ТВ будет обработана согласно настройкам вывода.
false
default
Значение (строка) будет возвращена, если поле не найдено или пусто.  

2. Плагин fastField

  • устанавливаем из репозитория
  • синтаксис вызова [[#resource_id.field]], где resource_id - ИД ресурса, field - название поля

Примеры использования плагина fastField

[[#1.pagetitle]] - поля ресурсов

[[#1.tv.myTV]] обработанные ТВ

[[#1.properties.articles.articlesPerPage]] параметры ресурса

[[#POST.name]] значение $_POST['name'] (и других глобальных ресурсов аналогично сниппету getReqParam)

Итак преимущества fastField в более удобном синтаксисе и расширенном функционале. Сравните: [[getResourceField? id=`1` &field=`pagetitle`]] аналогично вызову [[#1.pagetitle]]

[[getResourceField? id=`1` &field=`myTV` &isTV=`1` &processTV=`1`]] аналогично вызову [[#1.tv.myTV]]

[[#1.properties.articles.articlesPerPage]] или [[#1.property.articles.articlesPerPage]] или даже [[#1.prop.articles.articlesPerPage]] (не поддерживается getResourceField)

Этот пример имеет смысл при использовании дополнения Articles.
Стандартным является использование Пространства имён "core".

[[!#get.name]] возвращает значение $_GET['name']. Поддерживаются глобальные массивы: $_GET, $_POST, $_REQUEST, $_SERVER, $_FILES, $_COOKIE, $_SESSION. Тип массива после диеза (#) является чувствительным к регистру. Имя элемента массива также чувствительно к регистру. Вы можете использовать некешируемый тег [[!#get.name]] для кешируемых ресурсов.

Внимание! Используйте фильтр вывода :stripTags для предостережения XSS-атак (например: [[!#get.name:stripTags]])

fastField поддерживает фильтры вывода, например [[#3.pagetitle:ucase:default=`[[*pagetitle:ucase]]`]]

Ещё несколько примеров использования fastField

Выдаёт аннотацию родителя текущего ресурса и если она пуста, то выдаёт описание:

[[#[[*parent]].introtext:default=`[[#[[*parent]].description]]`]]

Возвращает содержимое ресурсов в чанке rowTpl во время использования Wayfinder:

[[#[[+wf.docid]].content]]

Возвращает значение ТВ image из ресурса с ИД 10:

[[#10.tv.image]]

Возвращает значение $_POST['myVar']:

[[!#post.myVar]]

3. Получение полей родителя через MODX API

Создаём сниппет с именем getThisField

$parent = $modx->getObject('modResource',$input);
$field = $parent ->get($options);
return $field; 

Вызываем данный сниппет для получения оглавления:

[[*parent:getThisField=`pagetitle`]]

Получение псевдонима у ресурса с ИД 123

[[123:getThisField=`alias`]]

Получение поля родителя через MODX API

Создаём сниппет и вставляем туда код для получения значения ТВ с именем myTVName для родителя ресурса с ИД = 123

$product = $modx->getObject('modResource',123);
$parent = $product->getOne('Parent');
$myTVValue = $parent->getTVValue('myTVName');

Источники полезной информации: