Я делаю так:
1. Создаю чанк "people" со значениями Вася==1||Петя==2||Коля==3||Оля==4
2. Создаю tv people, в поле "возможные значения" пишу @CHUNK people
3. Создаю сниппет phx:tvchunk
<?php
$items = explode("||", $modx->getChunk($options));
$names = array();
foreach ($items as $item) {
list($k,$v) = explode("==",$item);
$names[$v]=$k;
}
$values = explode(',', $output);
if (count($values)==1) return $names[$output];
$outputs = array();
foreach ($values as $v) $outputs[] = $names[$v];
return implode(', ',$outputs);
?>
Сниппет может возвращать несколько значений, если используется multiselect и визуальный компонент delimited list с запятой.
Тепеь можно его использовать в Ditto [+people:tvchunk=`people`+]
Или в шаблоне: [*people:tvchunk=`people`*]
В чём плюс: нет запросов к базе, чанки хранятся в кэше.