DevHub 3 - Pricing

39
Magento is an eBay Inc. company. © 2014 Magento, Inc. All rights reserved. Цены в Magento 2 Magento 2 Pricing

description

 

Transcript of DevHub 3 - Pricing

Page 1: DevHub 3 - Pricing

Magento is an eBay Inc. company. © 2014 Magento, Inc. All rights reserved.

Цены в Magento 2

Magento 2 Pricing

Page 2: DevHub 3 - Pricing

© 2014 Magento, Inc. Page | 2

Краткое содержание доклада

Обзор цен в Magento

Разновидности

Скидки и Налоги

Настройки

Проблемы

Magento 2 : Pricing library

Расчет

Рендеринг

Конфигурация

Итоги

Page 3: DevHub 3 - Pricing

© 2014 Magento, Inc. Page | 3© 2014 Magento, Inc. Page | 3

1 Разновидности цен

Page 4: DevHub 3 - Pricing

© 2014 Magento, Inc. Page | 4

Цены самого простого продукта

Цены продукта

Price

Special price (дата)

Tier price (количество продуктов, вебсайт, группа)

Group price (вебсайт, группа)

Manufacturer's Suggested Retail Price (Minimal Advertised Price)

Дополнительные цены

Custom Option Price

Page 5: DevHub 3 - Pricing

© 2014 Magento, Inc. Page | 5

Типы продуктов (возможно с собственной реализацией цен) Simple

Virtual

Grouped

Configurable

Bundle

Downloadable

Gift card (enterprise)

Page 6: DevHub 3 - Pricing

© 2014 Magento, Inc. Page | 6

Специфические цены разных типов продуктов

Attribute value price (Configurable product)

Link price (Downloadable product)

Selection price (Bundle product)

Page 7: DevHub 3 - Pricing

© 2014 Magento, Inc. Page | 7© 2014 Magento, Inc. Page | 7

2 Скидки и налоги

Page 8: DevHub 3 - Pricing

© 2014 Magento, Inc. Page | 8

Скидки

Без скидок

Catalog price rules

Shopping cart price rules

Page 9: DevHub 3 - Pricing

© 2014 Magento, Inc. Page | 9

Налоги

Без налогов

Tax

FPT

Page 10: DevHub 3 - Pricing

© 2014 Magento, Inc. Page | 10© 2014 Magento, Inc. Page | 10

3 Настройки расчета и отображения цен

Page 11: DevHub 3 - Pricing

© 2014 Magento, Inc. Page | 11

Настройки подсчета налогов

Page 12: DevHub 3 - Pricing

© 2014 Magento, Inc. Page | 12

Настройки отображения

~500 000

Page 13: DevHub 3 - Pricing

© 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>

Page 14: DevHub 3 - Pricing

© 2014 Magento, Inc. Page | 14

Проблемы

Сложность

Огромное количество условий в темплейтах

Расчет цены, налогов и скидок в темплейтах

Расчет цен в javascript

Отсутствие модулярности

Модули которые модифицируют цену (Tax, Weee) явно упоминаются в блоках и темплейтах других модулей. В результате такие модули нельзя отключить и/или подменить.

Дубликаты

Большое количество одинакового/похожего кода который конвертирует и форматирует цену

Page 15: DevHub 3 - Pricing

© 2014 Magento, Inc. Page | 15© 2014 Magento, Inc. Page | 15

4 Magento 2 : Pricing library

Page 16: DevHub 3 - Pricing

© 2014 Magento, Inc. Page | 16

Action plan

Сложность - Упрощаем

Концентрируем работу с ценами в одном меcте – Pricing library

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

Вводим иерархию сущностей цен

Модулярность - Поддерживаем

Выносим зависимости

Дубликаты - Устраняем

Унифицируем использование калькуляции и рендеринга

Page 17: DevHub 3 - Pricing

© 2014 Magento, Inc. Page | 17

Общая схема

Процесс отображение цен можно условно разделить на две части:

Расчет (калькуляцию) цены

Отображение (рендеринг) цены

Единой точкой входа выступает Pricing Render блок

Page 18: DevHub 3 - Pricing

© 2014 Magento, Inc. Page | 18© 2014 Magento, Inc. Page | 18

5 Расчет цены

Page 19: DevHub 3 - Pricing

© 2014 Magento, Inc. Page | 19

Сущности Pricing library

Saleable Item (продукт)

Price Info (провайдер цен и аджастментов)

Prices (цена конкретного типа для конкретного продукта)

Amounts (цена с сконфигурированным набором аджастментов)

Adjustments (налоги)

Page 20: DevHub 3 - Pricing

© 2014 Magento, Inc. Page | 20

Saleable Item

Каждая сущность которая может продаваться и имеет свою цену должна реализовать SaleableItemInterface

Предоставляет информацию необходимую для расчета цены

Продукт, услуга, что-либо продаваемое

Page 21: DevHub 3 - Pricing

© 2014 Magento, Inc. Page | 21

PriceInfo

Содержит в себе коллекции аджастментов и цен

Предоставляет доступ к аджастментам и ценам

Пул объектов цен и аджастментов

Page 22: DevHub 3 - Pricing

© 2014 Magento, Inc. Page | 22

Price

Реализует конкретный тип цены

Предоставляет возможность получить значение цены и/или обьект амаунта

Предоставляет дополнительную информацию о цене

Цена определенного типа

Page 23: DevHub 3 - Pricing

© 2014 Magento, Inc. Page | 23

Amount

Хранит базовое значение цены и применимые аджастменты

Дает возможность получить цифру с и без аджастметов

Предоставляет информацию о примененных аджастментах

Цена с закрепленным количеством наложенных аджастментов.

Page 24: DevHub 3 - Pricing

© 2014 Magento, Inc. Page | 24

Adjustment

Модификатор который может примениться к амаунту

Предоставляет возможность модифицировать цену сторонними модулями

Модификаторы цен (налоги)

Page 25: DevHub 3 - Pricing

© 2014 Magento, Inc. Page | 25

Расчет цены

Page 26: DevHub 3 - Pricing

© 2014 Magento, Inc. Page | 26© 2014 Magento, Inc. Page | 26

6 Рендеринг цены

Page 27: DevHub 3 - Pricing

© 2014 Magento, Inc. Page | 27

Pricing library. Точка входа

<?php echo $this->getLayout() ->getBlock('product.price.render') ->render('final_price', $product, $arguments);

Page 28: DevHub 3 - Pricing

© 2014 Magento, Inc. Page | 28

Отображение цены

Page 29: DevHub 3 - Pricing

© 2014 Magento, Inc. Page | 29

Рендеринг цены

Pricing Render Block

Price Box Render Block

Amount Render Block

Adjustment Render

Page 30: DevHub 3 - Pricing

© 2014 Magento, Inc. Page | 30© 2014 Magento, Inc. Page | 30

7 Конфигурация

Page 31: DevHub 3 - Pricing

© 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>

Page 32: DevHub 3 - Pricing

© 2014 Magento, Inc. Page | 32

Pricing layout

Pricing library для конфигурации отображения использует свой экземпляр лейаута

В хендлах этого лейаута объявляются блоки и темплейты для отрисовки каждой сущности прайсинга

Page 33: DevHub 3 - Pricing

© 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>

Пример.

Page 34: DevHub 3 - Pricing

© 2014 Magento, Inc. Page | 34

Pricing layout fallback

1

• Темплейт/Класс для конкретного продукта и конкретного типа цены

2

• Стандартный темплейт/класс для конкретного продукта

3

• Стандартный темплейт/класс для конкретного типа цены

4• Стандартный темплейт/класс

Page 35: DevHub 3 - Pricing

© 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>

Page 36: DevHub 3 - Pricing

© 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>

Page 37: DevHub 3 - Pricing

© 2014 Magento, Inc. Page | 37

Итоги

Модулярность

Простота в применении

Широкие возможности конфигурации

Отсутствие дубликатов кода

Отсутствие вычислений в темплейтах

Page 38: DevHub 3 - Pricing

© 2014 Magento, Inc. Page | 38© 2014 Magento, Inc. Page | 38

8

Q&A

Page 39: DevHub 3 - Pricing

© 2014 Magento, Inc. Page | 39© 2014 Magento, Inc. Page | 39

9 Thank you!