вот что у меня получилось:
<?php
$resid_int = $modx->getOption('resourceId', $scriptProperties, $modx->resource->get('id'));
$listElementTplName = $modx->getOption('listElementTpl', $scriptProperties, null);
$listElementTpl = $modx->getParser()->getElement('modChunk', $listElementTplName);
if ($listElementTpl) {
$listElementTpl->setCacheable(false);
} else {
$modx->log(modX::LOG_LEVEL_ERROR, 'getComplexCharacteristics: could not find chunk - ' . $listElementTplName);
return;
}
if (isset($resid_int )){
$tvs = array(); // массив с тв параметрами
//tv
$tv_query = $modx->newQuery('modTemplateVarResource');
$tv_query->leftJoin('modTemplateVar','modTemplateVar',array("modTemplateVar.id = tmplvarid"));
$tv_query->where(array('contentid'=>$resid_int));
$tv_query->select($modx->getSelectColumns('modTemplateVarResource','modTemplateVarResource','',array('id','tmplvarid','contentid','value')));
$tv_query->select($modx->getSelectColumns('modTemplateVar','modTemplateVar','',array('name')));
$tvars = $modx->getCollection('modTemplateVarResource',$tv_query);
foreach ($tvars as $tvar) {
$tvar = $tvar->toArray();
if (!empty($tvar['value']))
$tvNameOrId = $tvar['name'];
if (is_numeric($tvNameOrId)) {
$tvObj = $modx->getObject('modTemplateVar',$tvNameOrId);
} else {
$tvObj = $modx->getObject('modTemplateVar',array('name' => $tvNameOrId));
}
$fields = $tvObj->toArray();
if ($fields['category']!="") {
$tvData[category]=$fields['category'];
$tvData[caption]=$fields['caption'];
$tvData[name]=$fields['name'];
$tvData[value]=$fields['value'];
if ($fields['output_properties']['delimiter']!="")
$tvar['value']=str_replace('||',$fields['output_properties']['delimiter'],$tvar['value']);
//$output .= $listElementTpl->process($tvData);
$output.='
<tr><td><span class="name">'.$fields['caption'].'</span><span class="value">'.$tvar['value'].'</span></td></tr>
';
} }
}
return $output;
выводит все ТВ параметры, если ТВ относится к какой то группе и не пустой.