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