Получение всех TV ресурса по категории

23 Июня 2020 01:39 (Редактировано: 23 Июня 2020 01:57)

 Сниппет сформирует массив из всех 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
)