Сниппет сформирует массив из всех TV ресурса в паре "имя тв" => "значение тв" из определенной категории.
Допустим, мы насоздавали много TV-параметров и поместили их в разные категории: "Информация о товаре", "Изображения", "Комментарии" и т.д. По типу вот такого:
Но нам нужно получить все TV-параметры кокнретной категории в паре "имя тв" => "значение тв". Этот сниппет в этом поможет. Все что нужно - это id ресурса и id категории TV-параметров.
<?php
$id = 22; //Id ресурса
$tvCategoryId = 45; //Id категории ТВ полей
$q = $modx->newQuery('modTemplateVarResource');
$q->leftJoin('modTemplateVar', 'modTemplateVar', array("modTemplateVar.id = tmplvarid"));
$q->where(array('contentid' => $id, 'modTemplateVar.category' => $tvCategoryId));
$q->select($modx->getSelectColumns('modTemplateVarResource', 'modTemplateVarResource', '', array('id', 'tmplvarid', 'contentid', 'value')));
$q->select($modx->getSelectColumns('modTemplateVar', 'modTemplateVar', '', array('name', 'caption')));
$arTvs = $modx->getCollection('modTemplateVarResource', $q);
$tvsList = [];
foreach ($arTvs as $tv) {
$tv = $tv->toArray();
if (!empty($tv['value'])) {
$tvsList[$tv['name']] = $tv['value'];
}
}
echo "<pre>";
print_r($tvsList);
На выходе будет получаться массив со всеми ТВшками и их значениями конкретной категории конкретного ресурса следующего вида:
Array
(
[price] => 2500
[brand] => Sony
[chars] => Something||Another||Again something
[color] => White
)