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

Материал из Umicms
Перейти к:навигация, поиск
 
(не показана 1 промежуточная версия этого же участника)
Строка 4: Строка 4:
 
'''Реализация:''' <br/>
 
'''Реализация:''' <br/>
  
В файл '''custom.php''', находящийся в директории /classes/modules/, добавим следующие строчки:
+
В файл '''custom.php''', находящийся в директории /classes/modules/, добавим следующие строки:
 
<source lang="php">
 
<source lang="php">
 
public function sumPropertyValuesBasketItems($propName) {
 
public function sumPropertyValuesBasketItems($propName) {
Строка 34: Строка 34:
  
 
<h2>TPL-шаблонизатор</h2>
 
<h2>TPL-шаблонизатор</h2>
 +
Пример вызова:
 +
<source lang="html4strict">
 +
%custom sumPropertyValuesBasketItems( 'weight' )%
 +
</source>
  
 
<h2>XSLT-шаблонизатор</h2>
 
<h2>XSLT-шаблонизатор</h2>
 +
Пример вызова:
 +
<source lang="xml">
 +
<xsl:value-of select="document('udata://custom/sumPropertyValuesBasketItems/weight')/udata" />
 +
</source>

Текущая версия на 07:12, 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;
}

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

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

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

%custom sumPropertyValuesBasketItems( 'weight' )%

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

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

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