Для того чтобы получить данные полей дедушки вызываемого документа понадобится простой сниппет grandpaGet:
$parent_id = $modx->resource->get(‘parent’); $parent_obj = $modx->getObject(‘modResource’, $parent_id); //находим деда $granpa_id = $parent_obj->get(‘parent’); $granpa_obj = $modx->getObject(‘modResource’, $granpa_id); //Смотрим параметр что получить $whattoget = $scriptProperties[‘whattoget’]; //Получаем объект $granpa_thing = $granpa_obj->get($whattoget); //Выводим информацию. echo «$granpa_thing»;
И вызывать его можно с параметром где указываем название поля которое нужно получить, в примере мы получим заголовок документа у дедушки:
[[grandpaGet? resource->get(‘parent’); $parent_obj = $modx->getObject(‘modResource’, $parent_id); //находим деда $granpa_id = $parent_obj->get(‘parent’); $granpa_obj = $modx->getObject(‘modResource’, $granpa_id); //Смотрим параметр что получить $whattoget = $scriptProperties[‘whattoget’]; //Получаем объект $granpa_thing = $granpa_obj->getTVValue($whattoget); //Выводим информацию. echo «$granpa_thing»;
Источник: morngail.com
MODX Implementation Part 2 — Settings, Chunks & TV’s
Вывод текстовых значений TV из чанков
В Modx Evolution часто бывает довольно много прикрепленных TV параметров, значения которых хранятся в чанках.
Выводить эти значения на сайт приходится не менее часто и в самом разном виде: ссылками, списками, селектами и т.д.
Но чаще всего в виде простого текстового значения, для чего мы и написали простенький сниппет, в котором достаточно указать только имя чанка и значения TV.
Сниппет выводит как одиночные значения, так и множественные (Delimited List) разделяя их запятой.
Пример вызова:
[[GetTextValues? chunk=`name-of-chunk`]]
Код сниппета:
getChunk($chunk))); // удаляем возможные пустые значения $tv_val_arr=array_diff($tv_val_arr, array(0, null)); $items_list = array_diff($items_list, array(0, null)); $items_count=count($items_list); for($i=0;$i <$items_count;$i++) { list($itemvalue,$item)=explode(‘==’,$items_list[$i]); $items[$item]=$itemvalue; } foreach($tv_val_arr as $k =>$v) { $items_all[]= $items[$v]; } // здесь можно изменить формат вывода return implode(‘, ‘,$items_all); } else { return $text; }
Источник: webartis.ru
Множественные переменные в Modx Evolution
Как известно, в ModX есть прекрасный механизм позволяющий прикрепить практически любые собственный данные к документу, с последующим выводом этих данных. Данный механизм называется Template Variables (Переменные Шаблона). Однако у данного механизма есть небольшое ограничение, это невозможность задать одной переменной несколько значений.
Дополнительные поля (TV) в MODX Revolution
Почему такое поведение можно считать ограничением? Допустим, у нас есть документ, к которому надо прикрепить, а затем вывести, набор PDF файлов. Что можно сделать в данном случае? Можно вставить ссылки на все эти PDF в контент, однако для контент-менеджера это будет весьма трудоемкая и времязатратная задача. Можно создать чанк, в котором задавать ссылки на все PDF файлы, однако если таких документов будет много, то чанков не напасешься.
В данном случае, самым простым способом должно стать использование TV (Переменной Шаблона) с типом File, которой бы мы присвоили бы путь к файлу вместе с его именем, и которую бы использовали для формирования ссылок. Однако, в TV мы можем задать только одно значение, а делать большое количество TV не разумно.
Из данного положения есть выход. Это пакет для ModX Evolution под названием multiTV (http://modx.com/extras/package/multitv). Данный пакет был специально создан, что решить проблему с множественными значениями в Переменной Шаблона.
Я не буду останавливаться на всех возможных значениях, а приведу сразу код с краткими пояснениями:
array( ‘caption’ => ‘File’, ‘type’ => ‘file’ ), ‘title’ => array( ‘caption’ => ‘Title’, ‘type’ => ‘text’ ) ); ?>
В данном коде, мы указали, что переменная будет состоять из двух полей, а именно типа file (будет содержать путь к файлу) и типа text (будет содержать название, которым мы воспользуемся при формировании ссылки на PDF документ). Отображение полей будет происходить в вертикальном режиме. Все, теперь мы можем заполнить данную TV на каком-нибудь документе.
Для вывода данных воспользуемся входящим в пакет сниппетом:
[[multiTV? docid=`[*id*]` outerTpl=`brOut` Каталоги [+wrapper+]
Все, теперь любой контент-менеджер может прямо в интерфейсе заполнить все данные, загрузить файлы, после чего они автоматически будут выводиться в нашем шаблоне. Данное решение можно применять не только к файлам, но и ко всем возможным типам ввода TV, кроме url и richtext.
Источник: www.devmarks.ru