Названия tv-параметров для Comparison без словарей
        После установки дополнения Comparison для miniShop2 оказалось, что он требует внести в словари названия для каждого tv-параметра (это упомянуто в документации). Но для сайта с уже существующими 300+ tv-параметрами это долго, и контент-менеджеру не объяснишь, что теперь, помимо создания параметра надо ещё куда-то что-то писать… В итоге, на странице сравнения вызов сниппета выглядит так:
getComparisonParams — это сниппет, которые получает все tv-параметры для ресурсов, указанных в cmp_ids, исключая заранее определённые ненужные tv типа картинок или прикреплённых документов и инструкций. Кстати, id можно как-то получить не через GET?
getTVcaption — сниппет, который решает описанную в начале задачу.
    
    
                                                                                
            [[!CompareList?
	&fields=`{"default":["price",[[!getComparisonParams]] ]}`
	&tplParam=`@INLINE
		<td class="comparison-param">
			{{!getTVcaption? &key=`[[+field]]` ¶m=`[[+param]]`}}
		</td>`
]] getComparisonParams — это сниппет, которые получает все tv-параметры для ресурсов, указанных в cmp_ids, исключая заранее определённые ненужные tv типа картинок или прикреплённых документов и инструкций. Кстати, id можно как-то получить не через GET?
getTVcaption — сниппет, который решает описанную в начале задачу.
$q = $modx->newQuery('modTemplateVar');
$q->where(array('name' => $key));
$q->select(array('modTemplateVar.*'));
$q->prepare();
$q->stmt->execute();
$result = $q->stmt->fetchAll(PDO::FETCH_ASSOC);
if ( !empty($result[0]['caption']) ) { $paramName = $result[0]['caption']; }
else { $paramName = $param; }
return $paramName;    Комментарии: 1
                Возможно, что кому пригодится и код сниппета getComparisonParams — он выводит в кавычках через запятую ключи всех непустых tv-параметров у ресурсов, id которых заданны в get-переменной cmp_ids.
                    <?php
$output = '';
$tvs = array();
$excludeTVs = array(2,15,16); // исключаем картинки и документы
$comparisonIDs = explode(',', $_GET['cmp_ids']);
foreach($comparisonIDs as $child) {
    $tv_query = $modx->newQuery('modTemplateVarResource');
    $tv_query->leftJoin('modTemplateVar','modTemplateVar',array("modTemplateVar.id = tmplvarid"));
    $tv_query->where(array('contentid'=>$child));
    $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( !in_array($tvar['tmplvarid'], $excludeTVs) ) { $tvs[] = $tvar['tmplvarid']; }
    }
}
$tvs = array_unique($tvs);
$i = 0;
    foreach( $tvs as $tv ) {
        if( $i != 0 ) { $output .= ","; }
        $tvObj = $modx->getObject('modTemplateVar', $tv );
        $fields = $tvObj->toArray();
        if (preg_match('/^@/',$fields['elements'])) { $fields['elements'] = $tvObj->processBindings($fields['elements']); }
        $output .= '"'.$fields['name'].'"';
        $i++;
    }
//echo '<pre>'.print_r($tvs, true).'</pre>';
return $output;            
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.