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

Материал из Umicms
Перейти к:навигация, поиск
Строка 1: Строка 1:
== Задача ==
+
[[Категория:Верстка в TPL]][[Категория: Верстка в XSLT]][[Категория: Модуль Интернет магазин]]
Допустим, интернет-магазин продаёт какие-либо товары, у которых есть дополнительное поле - площадь, длина или, например, объём, и надо вывести макросом общий объём (площадь, длину и т.д.) товаров. Для этого напишем кастомный макрос.
+
'''Актуально для версии 2.9.6'''<br/><br/>
 +
'''Задача:''' Реализовать функционал подсчета общей суммы значений какого-либо поля товаров в корзине. <br/><br/>
 +
'''Реализация:''' <br/>
 +
 
 +
 
  
== Решение ==
 
 
В файл [[custom.php]] (находящийся в /classes/modules/) добавим следующие строчки:
 
В файл [[custom.php]] (находящийся в /classes/modules/) добавим следующие строчки:
 
<source lang="php">
 
<source lang="php">
//TODO: Write your own macroses here
+
public function sumPropertyValuesBasketItems($propName) {
 
+
if ( !$propName ) {
public function calculateSize() {
+
$propName = getRequest('param0');
// Переменная, содержащая сумму полей
+
}
$totalVol = 0;
+
$sumTotal = 0;
// Получение объект заказа (состояние текущей корзины)
+
// Получение объект заказа (состояние текущей корзины)
$order = cmsController::getInstance()->getModule("emarket")->getBasketOrder();
+
$basketOrder = cmsController::getInstance()->getModule("emarket")->getBasketOrder();
// Пересчёт содержимого корзины
+
// Пересчёт содержимого корзины
$order->refresh();
+
$basketOrder->refresh();
// Получение элементов корзины
+
// Получение элементов корзины
$items = $order->getItems();
+
$orderItems = $basketOrder->getItems();
// Цикл получения суммы
+
foreach($items as $item) {
+
foreach ($orderItems as $orderItem) {
// Сложение. "size" - идентификатор поля.
+
$hierarchyElement = $orderItem->getItemElement();
$totalSize += (int)$item->getItemElement()->getObject()->getValue("size") * (int)$item->getAmount();
+
$elementPropValue = floatval( $hierarchyElement->getValue($propName) );
}
+
$orderItemAmount = $orderItem->getAmount();
// Возвращаем результат
+
return $totalSize;
+
$sumTotal += $elementPropValue * $orderItemAmount;
}
+
}
 +
 +
$sumTotal = number_format($sumTotal, 2, '.', ',');
 +
return $sumTotal;
 +
}
 
</source>
 
</source>
  
Далее, в необходимом месте вставляем '''''%custom calculateSize()%'''''.
+
<h2>TPL-шаблонизатор</h2>
При необходимости можно добавить проверку или разделение по типам товаров.
 
 
 
=== Примечание ===
 
Данный макрос написан для версии '''2.8+'''.
 
  
[[Категория:Написание кастомных макросов]]
+
<h2>XSLT-шаблонизатор</h2>

Версия 07:05, 27 апреля 2014

Актуально для версии 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;
}

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

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