наименование TV берется из description
UPD: после долгих раздумий добавил в фильтр id категории
<?php /** * {'pars_part_tv' | snippet : [ 'templates' => $_modx->resource.template, 'ids' => $_modx->resource.id, 'inTv' => 'weight,lenght,-1sId', 'category' => '14,15', ]} * @param templates - id шаблона (обязательно) * @param ids - id ресурса (обязательно) * @param inTv - TV параметры через запятую, если нужно исключить какой-то параметр то пишем со знаком "-" * @param category - id каталога TVшек для дополнительной фильтрации * @param outerClass - класс обвертки по умолчанию ms2_product__tvs * */ if (empty($templates) || empty($ids)) { return; } $inTv = ($inTv != '') ? array_map('trim', explode(',', $inTv)) : false; $exTv = []; // tv исключения $exTv_temp = []; // tv исключения временный if ($inTv) { foreach ($inTv as $ikey => $IT) { if ($IT['0'] == '-') { $exTv[] = substr($IT,1); $exTv_temp[] = $IT; } } if (count($exTv)) { $inTv = array_diff($inTv, $exTv_temp); } } $res = $modx->getObject('modResource', ['id' => $ids]); if ($res == null) { return; } if (empty($outerClass)) { $outerClass = 'ms2_product__tvs'; } if ($inTv || $exTv) { $tvq = $modx->newQuery('modTemplateVar'); $tvq->where(['id:<>' => 0]); if ($inTv) { $tvq->where(['AND:name:IN' => $inTv]); } if ($exTv) { $tvq->where(['AND:name:NOT IN' => $exTv]); } if ( !empty($category) ) { $tvq->where(['AND:category:IN' => array_map('trim', explode(',', $category) )]); } $tvs = $modx->getIterator('modTemplateVar', $tvq); } else { $tvq = $modx->newQuery('modTemplateVarTemplate'); $tvq->leftJoin('modTemplateVar', 'tvs', 'tvs.id = modTemplateVarTemplate.tmplvarid'); $tvq->where(['templateid' => $templates]); if (!empty($category)) { $tvq->where(['tvs.category:IN' => array_map('trim', explode(',', $category))]); } $tvq->select($modx->getSelectColumns('modTemplateVar', 'tvs')); $tvs = $modx->getIterator('modTemplateVarTemplate', $tvq); $tvq->prepare(); } if ($tvs == null) { return; } $html = '<div class="'.$outerClass.'">'; foreach ($tvs as $tkey => $T) { if ($res->getTVValue($T->get('name')) != '') { if ($inTv) { if (in_array($T->get('name'), $inTv)) { $html .= '<div class="'.$outerClass.'_inner"> <div class="'.$outerClass.'_title">'.$T->get('description').'</div> <div class="'.$outerClass.'_body">'.$res->getTVValue($T->get('name')).'</div> </div>'; } } else { $html .= '<div class="'.$outerClass.'_inner"> <div class="'.$outerClass.'_title">'.$T->get('description').'</div> <div class="'.$outerClass.'_body">'.$res->getTVValue($T->get('name')).'</div> </div>'; } } } $html .= '</div>'; return $html;
Источник: modx.pro/solutions/23150
0 комментариев