Наверх

Сниппет вывода TV параметров при условии их наличия

В разделе «Репосты» расположены чужие статьи, которые мне понравились или показались полезными.

пригодился для вывода списка параметров товара из TV
наименование 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 комментариев

    Авторизация

    через сервис Loginza:


    Шаблоны MODX

    1 2 Дальше »

    Объектная
    модель
    MODX