kazakova-net
@kazakova-net
web-master

Как организовать вывод значения типа «список ресурсов» в сниппете Collections?

Добрый день! Для категории объектов установлен тип материала Коллекция. В столбцах указываю тв поля. Те из них, что имеют тип ввода "список ресурсов" или чекбксы (селекты) с возможными значениями типа значение1==1||значение2==2||.. выводятся как числа - для списка ресурсов - это id ресурса или ключи для мультивыбора соответственно.
Кто работал с этим сниппетом, подскажите, как прописать дружелюбный вывод осмысленных значений?
Я сама с этим сниппетом работаю первый раз, на просторах сети подобного решения не нашла.
  • Вопрос задан
  • 617 просмотров
Пригласить эксперта
Ответы на вопрос 2
kazakova-net
@kazakova-net Автор вопроса
web-master
Решение найдено самостоятельно.

Покопавшись в документации я выяснила, что Collections предоставляет возможность обрабатывать значение сниппетами-рендерами.
Для своих нужд я написала два вида сниппетов.

Если в виде Collections необходимо вывести значение поля с типом ввода "список ресурсов" и нужно вывести именно pagetitle ресурсов, а не их id, можно использовать следующий код:
<?php
$value = $modx->getOption('value', $scriptProperties, '');
$res = $modx->getObject('modResource',$value);
$output = $res->get('pagetitle');
return $output;


Для получения осмысленного значения у поля с типом ввода чекбокс при возможных значениях значение1==1||значение2==2||.. пригодился следующий сниппет-рендер:
<?php
$inputValue = $modx->getOption('value', $scriptProperties, '');

$resourceQuery = new xPDOCriteria($modx, "SELECT * FROM {$modx->getTableName('modTemplateVar')} WHERE name = 'objectTip'");
$tv = $modx->getObject('modTemplateVar', $resourceQuery);
$elements = $tv->get('elements');
$options = explode('||', $elements);
$lookup = array();
  
foreach ($options as $o) {
  list($name, $value) = explode('==', $o);
  $lookup[$value] = $name;
}

$output = $lookup[$inputValue];

return $output;


Так как к изучению xPDO я только приступила и мои знания не глубоки, я не исключаю, что этот сниппет можно сделать универсальным для любого тв-поля с типом ввода чекбокс (аналогично и селект), и буду рада, если кто-то в комментариях подскажет как это сделать. Я же писала отдельный сниппет для каждого поля и его имя передавала в запрос. Так как таким образом мне нужно было обработать всего 2 поля, остановилась на этом решении.

Возможно кому-то понадобится.
Ответ написан
Комментировать
@SergNewman
5ddf6c74ab676041074988.png
Что я делаю не так? У меня все равно ID выводит :-(
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы