Вывод суммы полей товаров в корзине — различия между версиями
Материал из Umicms
Stexe (обсуждение | вклад) |
Stexe (обсуждение | вклад) |
||
(не показаны 2 промежуточные версии этого же участника) | |||
Строка 1: | Строка 1: | ||
− | [[Категория:Верстка в TPL]][[Категория: Верстка в XSLT]][[Категория: Модуль Интернет магазин]] | + | [[Категория:Верстка в TPL]][[Категория: Верстка в XSLT]][[Категория: Модуль Интернет магазин]][[Категория: Написание кастомных макросов]] |
'''Актуально для версии 2.9.6'''<br/><br/> | '''Актуально для версии 2.9.6'''<br/><br/> | ||
'''Задача:''' Реализовать функционал подсчета общей суммы значений какого-либо поля товаров в корзине. <br/><br/> | '''Задача:''' Реализовать функционал подсчета общей суммы значений какого-либо поля товаров в корзине. <br/><br/> | ||
'''Реализация:''' <br/> | '''Реализация:''' <br/> | ||
− | + | В файл '''custom.php''', находящийся в директории /classes/modules/, добавим следующие строки: | |
− | |||
− | В файл | ||
<source lang="php"> | <source lang="php"> | ||
public function sumPropertyValuesBasketItems($propName) { | public function sumPropertyValuesBasketItems($propName) { | ||
Строка 32: | Строка 30: | ||
} | } | ||
</source> | </source> | ||
+ | |||
+ | Макрос '''sumPropertyValuesBasketItems()''' возвращает общую сумму значений поля с идентификатором '''$propName''' товаров в корзине. | ||
<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" />