Рад приветствовать всех на форуме!
Возникли задачи по выводу TV, которую не получается полностью осилить:
1. Вывести к ресурсу автоматически TV, занесенные в определенную группу
2. Вывести список из выбранных в мультисписке значений TV для ресурса, причем в списке каждая запись - это Название==icon_name. Делается это с тем, чтобы можно было разным ресурсам, не забивая заново значений списка, просто выбирать и показывать нужные параметры из всех имеющихся. Собственно, выводиться должна иконка с подписью.
1. Первая часть решается через сниппет:
<?php
$resid_int = $modx->getOption('resourceId', $scriptProperties, $modx->resource->get('id'));
$listElementTpl = $modx->getParser()->getElement('modChunk', $tpl);
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'] == $cat) {
$tvData['category'] = $fields['category'];
$tvData['caption'] = $fields['caption'];
$tvData['name'] = $fields['name'];
//$tvData['value']=$fields['value'];
$tvData['value'] = $tvar['value'];
$tvData['ending'] = $fields['properties']['ending']['value'];
$output .= $listElementTpl->process($tvData);
}
}
}
return $output;
Вызов сниппета в шаблоне:
[[!getTVs? &cat=`5` &id_doc=`[[*id]]` &tpl=`tplShowTVs`]]
Насколько это правильное решение - с учетом того, что оно-таки выводит данные?
2. По второму вопросу вообще не представляю, как сделать без костылей.
3. Ну и раз спросил, заодно уточню: можно ли как-то в чанке (или еще где-то) узнавать текущее число итерации во время прохода по значениям? Иногда, например, нужно бывает разбить вывод данных на два столбца или отсечь на три части и т. д. Как в этом случае можно поступить?