Вывод суммы полей товаров в корзине

Материал из Umicms
Перейти к:навигация, поиск

Актуально для версии 2.9.6

Задача: Реализовать функционал подсчета общей суммы значений какого-либо поля товаров в корзине.

Реализация:

В файл custom.php, находящийся в директории /classes/modules/, добавим следующие строчки:

public function sumPropertyValuesBasketItems($propName) {
	if ( !$propName ) {
		$propName = getRequest('param0');
	}
	$sumTotal = 0;
	// Получение объект заказа (состояние текущей корзины)
	$basketOrder = cmsController::getInstance()->getModule("emarket")->getBasketOrder();
	// Пересчёт содержимого корзины
	$basketOrder->refresh();
	// Получение элементов корзины
	$orderItems = $basketOrder->getItems();
	
	foreach ($orderItems as $orderItem) {
		$hierarchyElement = $orderItem->getItemElement();
		$elementPropValue = floatval( $hierarchyElement->getValue($propName) );
		$orderItemAmount = $orderItem->getAmount();
		
		$sumTotal += $elementPropValue * $orderItemAmount;
	}
	
	$sumTotal = number_format($sumTotal, 2, '.', ',');
	return $sumTotal;
}

Макрос sumPropertyValuesBasketItems() возвращает общую сумму значений поля с идентификатором $propName товаров в корзине.

TPL-шаблонизатор

Пример вызова:

%custom sumPropertyValuesBasketItems( 'weight' )%

XSLT-шаблонизатор

Пример вызова:

<xsl:value-of select="document('udata://custom/sumPropertyValuesBasketItems/weight')/udata"/>