Каждую неделю меня спрашивают: Как получить поля родителя в 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');

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

- [http://rtfm.modx.com/display/ADDON/getResourceField](http://rtfm.modx.com/display/ADDON/getResourceField)
- [http://rtfm.modx.com/display/ADDON/fastField](http://rtfm.modx.com/display/ADDON/fastField)
- [http://blog.artdevue.com/](http://blog.artdevue.com/)