devhub 3 - pricing
DESCRIPTION
TRANSCRIPT
Magento is an eBay Inc. company. © 2014 Magento, Inc. All rights reserved.
Цены в Magento 2
Magento 2 Pricing
© 2014 Magento, Inc. Page | 2
Краткое содержание доклада
Обзор цен в Magento
Разновидности
Скидки и Налоги
Настройки
Проблемы
Magento 2 : Pricing library
Расчет
Рендеринг
Конфигурация
Итоги
© 2014 Magento, Inc. Page | 3© 2014 Magento, Inc. Page | 3
1 Разновидности цен
© 2014 Magento, Inc. Page | 4
Цены самого простого продукта
Цены продукта
Price
Special price (дата)
Tier price (количество продуктов, вебсайт, группа)
Group price (вебсайт, группа)
Manufacturer's Suggested Retail Price (Minimal Advertised Price)
Дополнительные цены
Custom Option Price
© 2014 Magento, Inc. Page | 5
Типы продуктов (возможно с собственной реализацией цен) Simple
Virtual
Grouped
Configurable
Bundle
Downloadable
Gift card (enterprise)
© 2014 Magento, Inc. Page | 6
Специфические цены разных типов продуктов
Attribute value price (Configurable product)
Link price (Downloadable product)
Selection price (Bundle product)
© 2014 Magento, Inc. Page | 7© 2014 Magento, Inc. Page | 7
2 Скидки и налоги
© 2014 Magento, Inc. Page | 8
Скидки
Без скидок
Catalog price rules
Shopping cart price rules
© 2014 Magento, Inc. Page | 9
Налоги
Без налогов
Tax
FPT
© 2014 Magento, Inc. Page | 10© 2014 Magento, Inc. Page | 10
3 Настройки расчета и отображения цен
© 2014 Magento, Inc. Page | 11
Настройки подсчета налогов
© 2014 Magento, Inc. Page | 12
Настройки отображения
~500 000
© 2014 Magento, Inc. Page | 13
<?php
$_coreHelper = $this->helper('Magento\Core\Helper\Data');
$weeeHelper = $this->helper('Magento\Weee\Helper\Data');
$priceHelper = $this->helper('Magento\Catalog\Helper\Product\Price');
/* @var $_coreHelper \Magento\Core\Helper\Data */
/* @var $weeeHelper \Magento\Weee\Helper\Data */
/* @var $priceHelper Magento\Catalog\Helper\Product\Price */
$_product = $this->getProduct();
$_storeId = $_product->getStoreId();
$_id = $_product->getId();
$_weeeSeparator = '';
$_simplePricesTax = ($priceHelper->displayPriceIncludingTax() || $priceHelper->displayBothPrices());
$_minimalPriceValue = $_product->getMinimalPrice();
$_minimalPrice = $priceHelper->getPrice($_product, $_minimalPriceValue, $_simplePricesTax);
?>
<?php $_weeeTaxAmount = $weeeHelper->getAmountForDisplay($_product); ?>
<?php if ($weeeHelper->typeOfDisplay($_product, array(\Magento\Weee\Model\Tax::DISPLAY_INCL_DESCR, \Magento\Weee\Model\Tax::DISPLAY_EXCL_DESCR_INCL, 4))): ?>
<?php $_weeeTaxAmount = $weeeHelper->getAmount($_product); ?>
<?php $_weeeTaxAttributes = $weeeHelper->getProductWeeeAttributesForDisplay($_product); ?>
<?php endif; ?>
<?php $_weeeTaxAmountInclTaxes = $_weeeTaxAmount; ?>
<?php if ($weeeHelper->isTaxable() && !$priceHelper->priceIncludesTax($_storeId)): ?>
<?php $_attributes = $weeeHelper->getProductWeeeAttributesForRenderer($_product, null, null, null, true); ?>
<?php $_weeeTaxAmountInclTaxes = $weeeHelper->getAmountInclTaxes($_attributes); ?>
<?php endif; ?>
<div class="price-box">
<?php $_price = $priceHelper->getPrice($_product, $_product->getPrice()) ?>
<?php $_regularPrice = $priceHelper->getPrice($_product, $_product->getPrice(), $_simplePricesTax) ?>
<?php $_finalPrice = $priceHelper->getPrice($_product, $_product->getFinalPrice()) ?>
<?php $_finalPriceInclTax = $priceHelper->getPrice($_product, $_product->getFinalPrice(), true) ?>
<?php $_weeeDisplayType = $weeeHelper->getPriceDisplayType(); ?>
<?php if ($_finalPrice >= $_price): ?>
<?php if ($priceHelper->displayBothPrices()): ?>
<?php if ($_weeeTaxAmount && $weeeHelper->typeOfDisplay($_product, 0)): // including ?>
<span class="price-excluding-tax">
<span class="label"><?php echo __('Excl. Tax:') ?></span>
<span class="price" id="price-excluding-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
<?php echo $_coreHelper->currency($_price + $_weeeTaxAmount, true, false) ?>
</span>
</span>
<span class="price-including-tax">
<span class="label"><?php echo __('Incl. Tax:') ?></span>
<span class="price" id="price-including-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
<?php echo $_coreHelper->currency($_finalPriceInclTax + $_weeeTaxAmountInclTaxes, true, false) ?>
</span>
</span>
<?php elseif ($_weeeTaxAmount && $weeeHelper->typeOfDisplay($_product, 1)): // incl. + weee ?>
<span class="price-excluding-tax">
<span class="label"><?php echo __('Excl. Tax:') ?></span>
<span class="price" id="price-excluding-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
<?php echo $_coreHelper->currency($_price + $_weeeTaxAmount, true, false) ?>
</span>
</span>
<span class="price-including-tax">
<span class="label"><?php echo __('Incl. Tax:') ?></span>
<span class="price" id="price-including-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
<?php echo $_coreHelper->currency($_finalPriceInclTax + $_weeeTaxAmountInclTaxes, true, false) ?>
</span>
<span class="weee">(
<?php foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?>
<?php echo $_weeeSeparator; ?>
<?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo $_coreHelper->currency($_weeeTaxAttribute->getAmount(), true, true); ?>
<?php $_weeeSeparator = ' + '; ?>
<?php endforeach; ?>
)</span>
</span>
<?php elseif ($_weeeTaxAmount && $weeeHelper->typeOfDisplay($_product, 4)): // incl. + weee ?>
<span class="price-excluding-tax">
<span class="label"><?php echo __('Excl. Tax:') ?></span>
<span class="price" id="price-excluding-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
<?php echo $_coreHelper->currency($_price + $_weeeTaxAmount, true, false) ?>
</span>
</span>
<span class="price-including-tax">
<span class="label"><?php echo __('Incl. Tax:') ?></span>
<span class="price" id="price-including-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
<?php echo $_coreHelper->currency($_finalPriceInclTax + $_weeeTaxAmountInclTaxes, true, false) ?>
</span>
<span class="weee">(
<?php foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?>
<?php echo $_weeeSeparator; ?>
<?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo $_coreHelper->currency($_weeeTaxAttribute->getAmount() + $_weeeTaxAttribute->getTaxAmount(), true, true); ?>
<?php $_weeeSeparator = ' + '; ?>
<?php endforeach; ?>
)</span>
</span>
<?php elseif ($_weeeTaxAmount && $weeeHelper->typeOfDisplay($_product, 2)): // excl. + weee + final ?>
<span class="price-excluding-tax">
<span class="label"><?php echo __('Excl. Tax:') ?></span>
<span class="price" id="price-excluding-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
<?php echo $_coreHelper->currency($_price, true, false) ?>
</span>
</span>
<?php foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?>
<span class="weee">
<?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo $_coreHelper->currency($_weeeTaxAttribute->getAmount(), true, true); ?>
</span>
<?php endforeach; ?>
<span class="price-including-tax">
<span class="label"><?php echo __('Incl. Tax:') ?></span>
<span class="price" id="price-including-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
<?php echo $_coreHelper->currency($_finalPriceInclTax + $_weeeTaxAmountInclTaxes, true, false) ?>
</span>
</span>
<?php else: ?>
<span class="price-excluding-tax">
<span class="label"><?php echo __('Excl. Tax:') ?></span>
<span class="price" id="price-excluding-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
<?php if ($_finalPrice == $_price): ?>
<?php echo $_coreHelper->currency($_price, true, false) ?>
<?php else: ?>
<?php echo $_coreHelper->currency($_finalPrice, true, false) ?>
<?php endif; ?>
</span>
</span>
<span class="price-including-tax">
<span class="label"><?php echo __('Incl. Tax:') ?></span>
<span class="price" id="price-including-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
<?php echo $_coreHelper->currency($_finalPriceInclTax, true, false) ?>
</span>
</span>
<?php endif; ?>
<?php else: ?>
<?php if ($_weeeTaxAmount && $weeeHelper->typeOfDisplay($_product, 0)): // including ?>
<span class="regular-price" id="product-price-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
<?php echo $_coreHelper->currency($_price + $_weeeTaxAmount, true, true) ?>
</span>
<?php elseif ($_weeeTaxAmount && $weeeHelper->typeOfDisplay($_product, 1)): // incl. + weee ?>
<span class="regular-price" id="product-price-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
<?php echo $_coreHelper->currency($_price + $_weeeTaxAmount, true, true) ?>
</span>
<span class="weee">(
<?php foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?>
<?php echo $_weeeSeparator; ?>
<?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo $_coreHelper->currency($_weeeTaxAttribute->getAmount(), true, true); ?>
<?php $_weeeSeparator = ' + '; ?>
<?php endforeach; ?>
)</span>
<?php elseif ($_weeeTaxAmount && $weeeHelper->typeOfDisplay($_product, 4)): // incl. + weee ?>
<span class="regular-price" id="product-price-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
<?php echo $_coreHelper->currency($_price + $_weeeTaxAmount, true, true) ?>
</span>
<span class="weee">(
<?php foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?>
<?php echo $_weeeSeparator; ?>
<?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo $_coreHelper->currency($_weeeTaxAttribute->getAmount() + $_weeeTaxAttribute->getTaxAmount(), true, true); ?>
<?php $_weeeSeparator = ' + '; ?>
<?php endforeach; ?>
)</span>
<?php elseif ($_weeeTaxAmount && $weeeHelper->typeOfDisplay($_product, 2)): // excl. + weee + final ?>
<span class="regular-price"><?php echo $_coreHelper->currency($_price,true,true) ?></span><br />
<?php foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?>
<span class="weee">
<?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo $_coreHelper->currency($_weeeTaxAttribute->getAmount(), true, true); ?>
</span>
<?php endforeach; ?>
<span class="regular-price" id="product-price-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
<?php echo $_coreHelper->currency($_price + $_weeeTaxAmount, true, true) ?>
</span>
<?php else: ?>
<span class="regular-price" id="product-price-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
<?php if ($_finalPrice == $_price): ?>
<?php echo $_coreHelper->currency($_price, true, true) ?>
<?php else: ?>
<?php echo $_coreHelper->currency($_finalPrice, true, true) ?>
<?php endif; ?>
</span>
<?php endif; ?>
<?php endif; ?>
<?php else: /* if ($_finalPrice == $_price): */ ?>
<?php $_originalWeeeTaxAmount = $weeeHelper->getOriginalAmount($_product); ?>
<?php if ($_weeeTaxAmount && $weeeHelper->typeOfDisplay($_product, 0)): // including ?>
<p class="old-price">
<span class="price-label"><?php echo __('Regular Price:') ?></span>
<span class="price" id="old-price-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
<?php echo $_coreHelper->currency($_regularPrice + $_originalWeeeTaxAmount, true, false) ?>
</span>
</p>
<?php if ($priceHelper->displayBothPrices()): ?>
<p class="special-price">
<span class="price-label"><?php echo __('Special Price:') ?></span>
<span class="price-excluding-tax">
<span class="label"><?php echo __('Excl. Tax:') ?></span>
<span class="price" id="price-excluding-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
<?php echo $_coreHelper->currency($_finalPrice + $_weeeTaxAmount, true, false) ?>
</span>
</span>
<span class="price-including-tax">
<span class="label"><?php echo __('Incl. Tax:') ?></span>
<span class="price" id="price-including-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
<?php echo $_coreHelper->currency($_finalPriceInclTax + $_weeeTaxAmountInclTaxes, true, false) ?>
</span>
</span>
</p>
<?php else: ?>
<p class="special-price">
<span class="price-label"><?php echo __('Special Price:') ?></span>
<span class="price" id="product-price-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
<?php echo $_coreHelper->currency($_finalPrice + $_weeeTaxAmountInclTaxes, true, false) ?>
</span>
</p>
<?php endif; ?>
<?php elseif ($_weeeTaxAmount && $weeeHelper->typeOfDisplay($_product, 1)): // incl. + weee ?>
<p class="old-price">
<span class="price-label"><?php echo __('Regular Price:') ?></span>
<span class="price" id="old-price-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
<?php echo $_coreHelper->currency($_regularPrice + $_originalWeeeTaxAmount, true, false) ?>
</span>
</p>
<p class="special-price">
<span class="price-label"><?php echo __('Special Price:') ?></span>
<span class="price-excluding-tax">
<span class="label"><?php echo __('Excl. Tax:') ?></span>
<span class="price" id="price-excluding-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
<?php echo $_coreHelper->currency($_finalPrice + $_weeeTaxAmount, true, false) ?>
</span>
</span>
<span class="weee">(
<?php foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?>
<?php echo $_weeeSeparator; ?>
<?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo $_coreHelper->currency($_weeeTaxAttribute->getAmount(), true, true); ?>
<?php $_weeeSeparator = ' + '; ?>
<?php endforeach; ?>
)</span>
<span class="price-including-tax">
<span class="label"><?php echo __('Incl. Tax:') ?></span>
<span class="price" id="price-including-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
<?php echo $_coreHelper->currency($_finalPriceInclTax + $_weeeTaxAmountInclTaxes, true, false) ?>
</span>
</span>
</p>
<?php elseif ($_weeeTaxAmount && $weeeHelper->typeOfDisplay($_product, 4)): // incl. + weee ?>
<p class="old-price">
<span class="price-label"><?php echo __('Regular Price:') ?></span>
<span class="price" id="old-price-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
<?php echo $_coreHelper->currency($_regularPrice + $_originalWeeeTaxAmount, true, false) ?>
</span>
</p>
<p class="special-price">
<span class="price-label"><?php echo __('Special Price:') ?></span>
<span class="price-excluding-tax">
<span class="label"><?php echo __('Excl. Tax:') ?></span>
<span class="price" id="price-excluding-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
<?php echo $_coreHelper->currency($_finalPrice + $_weeeTaxAmount, true, false) ?>
</span>
</span>
<span class="weee">(
<?php foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?>
<?php echo $_weeeSeparator; ?>
<?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo $_coreHelper->currency($_weeeTaxAttribute->getAmount() + $_weeeTaxAttribute->getTaxAmount(), true, true); ?>
<?php $_weeeSeparator = ' + '; ?>
<?php endforeach; ?>
)</span>
<span class="price-including-tax">
<span class="label"><?php echo __('Incl. Tax:') ?></span>
<span class="price" id="price-including-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
<?php echo $_coreHelper->currency($_finalPriceInclTax + $_weeeTaxAmountInclTaxes, true, false) ?>
</span>
</span>
</p>
<?php elseif ($_weeeTaxAmount && $weeeHelper->typeOfDisplay($_product, 2)): // excl. + weee + final ?>
<p class="old-price">
<span class="price-label"><?php echo __('Regular Price:') ?></span>
<span class="price" id="old-price-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
<?php echo $_coreHelper->currency($_regularPrice, true, false) ?>
</span>
</p>
<p class="special-price">
<span class="price-label"><?php echo __('Special Price:') ?></span>
<span class="price-excluding-tax">
<span class="label"><?php echo __('Excl. Tax:') ?></span>
<span class="price" id="price-excluding-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
<?php echo $_coreHelper->currency($_finalPrice, true, false) ?>
</span>
</span>
<?php foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?>
<span class="weee">
<?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo $_coreHelper->currency($_weeeTaxAttribute->getAmount(), true, true); ?>
</span>
<?php endforeach; ?>
<span class="price-including-tax">
<span class="label"><?php echo __('Incl. Tax:') ?></span>
<span class="price" id="price-including-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
<?php echo $_coreHelper->currency($_finalPriceInclTax + $_weeeTaxAmountInclTaxes, true, false) ?>
</span>
</span>
</p>
<?php else: // excl. ?>
<p class="old-price">
<span class="price-label"><?php echo __('Regular Price:') ?></span>
<span class="price" id="old-price-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
<?php echo $_coreHelper->currency($_regularPrice, true, false) ?>
</span>
</p>
<?php if ($priceHelper->displayBothPrices()): ?>
<p class="special-price">
<span class="price-label"><?php echo __('Special Price:') ?></span>
<span class="price-excluding-tax">
<span class="label"><?php echo __('Excl. Tax:') ?></span>
<span class="price" id="price-excluding-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
<?php echo $_coreHelper->currency($_finalPrice, true, false) ?>
</span>
</span>
<span class="price-including-tax">
<span class="label"><?php echo __('Incl. Tax:') ?></span>
<span class="price" id="price-including-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
<?php echo $_coreHelper->currency($_finalPriceInclTax, true, false) ?>
</span>
</span>
</p>
<?php else: ?>
<p class="special-price">
<span class="price-label"><?php echo __('Special Price:') ?></span>
<span class="price" id="product-price-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
<?php echo $_coreHelper->currency($_finalPrice, true, false) ?>
</span>
</p>
<?php endif; ?>
<?php endif; ?>
<?php endif; /* if ($_finalPrice == $_price): */ ?>
<?php if ($this->getDisplayMinimalPrice() && $_minimalPriceValue && $_minimalPriceValue < $_product->getFinalPrice()): ?>
<?php $_minimalPriceDisplayValue = $_minimalPrice; ?>
<?php if ($_weeeTaxAmount && $weeeHelper->typeOfDisplay($_product, array(0, 1, 4))): ?>
<?php $_minimalPriceDisplayValue = $_minimalPrice + $_weeeTaxAmount; ?>
<?php endif; ?>
<?php if ($this->getUseLinkForAsLowAs()):?>
<a href="<?php echo $_product->getProductUrl(); ?>" class="minimal-price-link">
<?php else:?>
<span class="minimal-price-link">
<?php endif?>
<span class="label"><?php echo __('As low as:') ?></span>
<span class="price" id="product-minimal-price-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
<?php echo $_coreHelper->currency($_minimalPriceDisplayValue, true, false) ?>
</span>
<?php if ($this->getUseLinkForAsLowAs()):?>
</a>
<?php else:?>
</span>
<?php endif?>
<?php endif; /* if ($this->getDisplayMinimalPrice() && $_minimalPrice && $_minimalPrice < $_finalPrice): */ ?>
</div>
© 2014 Magento, Inc. Page | 14
Проблемы
Сложность
Огромное количество условий в темплейтах
Расчет цены, налогов и скидок в темплейтах
Расчет цен в javascript
Отсутствие модулярности
Модули которые модифицируют цену (Tax, Weee) явно упоминаются в блоках и темплейтах других модулей. В результате такие модули нельзя отключить и/или подменить.
Дубликаты
Большое количество одинакового/похожего кода который конвертирует и форматирует цену
© 2014 Magento, Inc. Page | 15© 2014 Magento, Inc. Page | 15
4 Magento 2 : Pricing library
© 2014 Magento, Inc. Page | 16
Action plan
Сложность - Упрощаем
Концентрируем работу с ценами в одном меcте – Pricing library
Выносим расчет из темплейтов
Вводим иерархию сущностей цен
Модулярность - Поддерживаем
Выносим зависимости
Дубликаты - Устраняем
Унифицируем использование калькуляции и рендеринга
© 2014 Magento, Inc. Page | 17
Общая схема
Процесс отображение цен можно условно разделить на две части:
Расчет (калькуляцию) цены
Отображение (рендеринг) цены
Единой точкой входа выступает Pricing Render блок
© 2014 Magento, Inc. Page | 18© 2014 Magento, Inc. Page | 18
5 Расчет цены
© 2014 Magento, Inc. Page | 19
Сущности Pricing library
Saleable Item (продукт)
Price Info (провайдер цен и аджастментов)
Prices (цена конкретного типа для конкретного продукта)
Amounts (цена с сконфигурированным набором аджастментов)
Adjustments (налоги)
© 2014 Magento, Inc. Page | 20
Saleable Item
Каждая сущность которая может продаваться и имеет свою цену должна реализовать SaleableItemInterface
Предоставляет информацию необходимую для расчета цены
Продукт, услуга, что-либо продаваемое
© 2014 Magento, Inc. Page | 21
PriceInfo
Содержит в себе коллекции аджастментов и цен
Предоставляет доступ к аджастментам и ценам
Пул объектов цен и аджастментов
© 2014 Magento, Inc. Page | 22
Price
Реализует конкретный тип цены
Предоставляет возможность получить значение цены и/или обьект амаунта
Предоставляет дополнительную информацию о цене
Цена определенного типа
© 2014 Magento, Inc. Page | 23
Amount
Хранит базовое значение цены и применимые аджастменты
Дает возможность получить цифру с и без аджастметов
Предоставляет информацию о примененных аджастментах
Цена с закрепленным количеством наложенных аджастментов.
© 2014 Magento, Inc. Page | 24
Adjustment
Модификатор который может примениться к амаунту
Предоставляет возможность модифицировать цену сторонними модулями
Модификаторы цен (налоги)
© 2014 Magento, Inc. Page | 25
Расчет цены
© 2014 Magento, Inc. Page | 26© 2014 Magento, Inc. Page | 26
6 Рендеринг цены
© 2014 Magento, Inc. Page | 27
Pricing library. Точка входа
<?php echo $this->getLayout() ->getBlock('product.price.render') ->render('final_price', $product, $arguments);
© 2014 Magento, Inc. Page | 28
Отображение цены
© 2014 Magento, Inc. Page | 29
Рендеринг цены
Pricing Render Block
Price Box Render Block
Amount Render Block
Adjustment Render
© 2014 Magento, Inc. Page | 30© 2014 Magento, Inc. Page | 30
7 Конфигурация
© 2014 Magento, Inc. Page | 31
Объявление рендера
Входной точкой в Pricing является Magento\Framework\Pricing\Render
Блок этого класса должен быть объявлен в layout.xml для необходимых страниц
При объявлении блока есть возможность указать:
Имя используемого Pricing layout handle
Параметры для темплейтов
<layout> <block class="Magento\Framework\Pricing\Render" name="product.price.render"> <arguments> <argument name="price_render_handle" xsi:type="string">catalog_product_prices</argument> <!-- set configuration settings here --> </arguments> </block></layout>
© 2014 Magento, Inc. Page | 32
Pricing layout
Pricing library для конфигурации отображения использует свой экземпляр лейаута
В хендлах этого лейаута объявляются блоки и темплейты для отрисовки каждой сущности прайсинга
© 2014 Magento, Inc. Page | 33
Pricing layout<layout ...> <block class="Magento\Framework\Pricing\Render\RendererPool" name="render.product.prices"> <arguments> <argument name="default" xsi:type="array"> <item name="prices" xsi:type="array"> <item name="special_price" xsi:type="array"> <item name="render_template" xsi:type="string"> Magento_Catalog::product/price/special_price.phtml </item> </item> ... </item> </argument> <argument name="bundle" xsi:type="array"> <item name="adjustments" xsi:type="array"> <item name="bundle_option" xsi:type="array"> <item name="tax" xsi:type="array"> <item name="adjustment_render_class" xsi:type="string"> Magento\Tax\Pricing\Render\Adjustment </item> <item name="adjustment_render_template" xsi:type="string"> Magento_Tax::pricing/adjustment/bundle.phtml </item> </item> </item> </item> </argument> </arguments> </block></layout>
Пример.
© 2014 Magento, Inc. Page | 34
Pricing layout fallback
1
• Темплейт/Класс для конкретного продукта и конкретного типа цены
2
• Стандартный темплейт/класс для конкретного продукта
3
• Стандартный темплейт/класс для конкретного типа цены
4• Стандартный темплейт/класс
© 2014 Magento, Inc. Page | 35
Prices
Классы отвечающие за конкретные типы цен передаются в Magento\Framework\Pricing\Price\Pool используя конфигурацию DI
<config ...> <virtualType name="Magento\Catalog\Pricing\Price\Pool" type="Magento\Framework\Pricing\Price\Pool"> <arguments> <argument name="prices" xsi:type="array"> <item name="regular_price" xsi:type="string">Magento\Catalog\Pricing\Price\RegularPrice</item> <item name="final_price" xsi:type="string">Magento\Catalog\Pricing\Price\FinalPrice</item> <item name="tier_price" xsi:type="string">Magento\Catalog\Pricing\Price\TierPrice</item> <item name="group_price" xsi:type="string">Magento\Catalog\Pricing\Price\GroupPrice</item> <item name="special_price" xsi:type="string">Magento\Catalog\Pricing\Price\SpecialPrice</item> ... </argument> </arguments> </virtualType></config>
© 2014 Magento, Inc. Page | 36
Adjustments
Классы отвечающие за конкретные типы аджастментов передаются в Magento\Pricing\Adjustment\Pool используя конфигурацию DI
При конфигурации аджастментов есть возможность указать порядок их применения
<config ...> <type name="Magento\Pricing\Adjustment\Pool"> <arguments> <argument name="adjustments" xsi:type="array"> <item name="tax" xsi:type="array"> <item name="className" xsi:type="string">Magento\Tax\Pricing\Adjustment</item> <item name="sortOrder" xsi:type="string">20</item> </item> </argument> </arguments> </type></config>
© 2014 Magento, Inc. Page | 37
Итоги
Модулярность
Простота в применении
Широкие возможности конфигурации
Отсутствие дубликатов кода
Отсутствие вычислений в темплейтах
© 2014 Magento, Inc. Page | 38© 2014 Magento, Inc. Page | 38
8
Q&A
© 2014 Magento, Inc. Page | 39© 2014 Magento, Inc. Page | 39
9 Thank you!