MagentoQuoteModelCartTotalsItem(MagentoQuoteApiDataTotalsItemInterface)php
MagentoCheckoutModelDefaultConfigProvider::getConfig()frontend
MagentoCheckoutBlockOnepage::getCheckoutConfig()ide
window.checkoutConfig.totalsData.itemsthis
quote.totals().items (Magento_Checkout/js/model/quote as quote)spa
可用plugin修改Magento\Checkout\Model\DefaultConfigProvider::getConfig()
來改變totals itemscode
如下是爲totals 中的product item添加brand屬性的過程xml
etc/frontend/di.xml
get
<?xml version="1.0" ?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd"> <type name="Magento\Checkout\Model\DefaultConfigProvider"> <plugin name="infinity_checkout_model_defaultconfigprovider" type="Infinity\Checkout\Plugin\Magento\Checkout\Model\DefaultConfigProvider" /> </type> </config>
namespace Infinity\Checkout\Plugin\Magento\Checkout\Model; class DefaultConfigProvider { protected $productRepository; public function __construct( \Magento\Catalog\Model\ProductRepository $productRepository ) { $this->productRepository = $productRepository; } public function afterGetConfig(\Magento\Checkout\Model\DefaultConfigProvider $subject, $return) { if(!empty($return['totalsData']['items']) && is_array($return['totalsData']['items']) && !empty($return['quoteItemData']) && is_array($return['quoteItemData']) ) { $items = $return['totalsData']['items']; $quoteItemData = $return['quoteItemData']; $quoteItemData = array_column($quoteItemData, NULL, 'item_id'); foreach($items as $key => $item) { $id = $quoteItemData[$item['item_id']]['product_id']; if($id) { $product = $this->productRepository->getById($id); $items[$key]['brand'] = $product->getAttributeText('general_brand'); } } $return['totalsData']['items'] = $items; } return $return; } }