Saya ingin menyesuaikan minicart saya di Magento 2. Saya perlu menambahkan 3 atribut: SKU, Pabrikan, dan nomor bagian Pabrikan. Ini adalah atribut yang ada. Saya melihat di mana menambahkan nilai output tetapi tidak dari mana mereka memanggilnya.
Saya ingin menyesuaikan minicart saya di Magento 2. Saya perlu menambahkan 3 atribut: SKU, Pabrikan, dan nomor bagian Pabrikan. Ini adalah atribut yang ada. Saya melihat di mana menambahkan nilai output tetapi tidak dari mana mereka memanggilnya.
Jawaban:
Anda dapat membuat modul untuk melakukan ini. Ini akan menggunakan plugin untuk menambahkan atribut ke array data yang dibaca oleh templat js knockout. Maka kita perlu mengganti template untuk menampilkan nilai-nilai ini.
Ini adalah direktori modul:
| registration.php
|
+---etc
| | module.xml
| | catalog_attributes.xml
| |
| \---frontend
| di.xml
|
+---Plugin
| DefaultItem.php
|
\---view
+---frontend
| \---layout
| checkout_cart_sidebar_item_renderers.xml
|
\---web
\---template
\---mini cart
\---item
default.html
catalog_attributes.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Catalog:etc/catalog_attributes.xsd">
<group name="quote_item">
<attribute name="manufacturer"/>
<attribute name="part_number"/>
</group>
</config>
di.xml
<?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\CustomerData\DefaultItem">
<plugin name="AddAttPlug" type="Your\Module\Plugin\DefaultItem" disabled="false" sortOrder="10"/>
</type>
</config>
DefaultItem.php
<?php
namespace Your\Module\Plugin;
use Magento\Quote\Model\Quote\Item;
class DefaultItem
{
public function aroundGetItemData($subject, \Closure $proceed, Item $item)
{
$data = $proceed($item);
$product = $item->getProduct();
$atts = [
"product_manufacturer" => $product->getAttributeText('manufacturer'),
"product_part_number" => $product->getAttributeText('product_part_number')
];
return array_merge($data, $atts);
}
}
SKU sudah ada dalam data sehingga tidak perlu menambahkannya.
checkout_cart_sidebar_item_renderers.xml
<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
<referenceBlock name="minicart">
<arguments>
<argument name="jsLayout" xsi:type="array">
<item name="components" xsi:type="array">
<item name="minicart_content" xsi:type="array">
<item name="children" xsi:type="array">
<item name="item.renderer" xsi:type="array">
<item name="config" xsi:type="array">
<item name="template" xsi:type="string">Your_Module/minicart/item/default</item>
</item>
</item>
</item>
</item>
</item>
</argument>
</arguments>
</referenceBlock>
</body>
</page>
default.html adalah salinan Magento/Checkout/view/frontend/web/template/minicart/item/default.html
dengan perubahan yang dibuat pada baris 66
<li class="item product product-item" data-role="product-item">
<div class="product">
<!-- ko if: product_has_url -->
<a data-bind="attr: {href: product_url, title: product_name}" tabindex="-1" class="product-item-photo">
<!-- ko foreach: $parent.getRegion('itemImage') -->
<!-- ko template: {name: getTemplate(), data: item.product_image} --><!-- /ko -->
<!-- /ko -->
</a>
<!-- /ko -->
<!-- ko ifnot: product_has_url -->
<span class="product-item-photo">
<!-- ko foreach: $parent.getRegion('itemImage') -->
<!-- ko template: {name: getTemplate(), data: item.product_image} --><!-- /ko -->
<!-- /ko -->
</span>
<!-- /ko -->
<div class="product-item-details">
<strong class="product-item-name">
<!-- ko if: product_has_url -->
<a data-bind="attr: {href: product_url}, text:
product_name"></a>
<!-- /ko -->
<!-- ko ifnot: product_has_url -->
<!-- ko text: product_name --><!-- /ko -->
<!-- /ko -->
</strong>
<!-- ko if: options.length -->
<div class="product options" data-mage-init='{"collapsible":{"openedState": "active", "saveState": false}}'>
<span data-role="title" class="toggle"><!-- ko i18n: 'See Details' --><!-- /ko --></span>
<div data-role="content" class="content">
<strong class="subtitle"><!-- ko i18n: 'Options Details' --><!-- /ko --></strong>
<dl class="product options list">
<!-- ko foreach: { data: options, as: 'option' } -->
<dt class="label"><!-- ko text: option.label --><!-- /ko --></dt>
<dd class="values">
<!-- ko if: Array.isArray(option.value) -->
<span data-bind="html: option.value.join('<br>')"></span>
<!-- /ko -->
<!-- ko ifnot: Array.isArray(option.value) -->
<span data-bind="html: option.value"></span>
<!-- /ko -->
</dd>
<!-- /ko -->
</dl>
</div>
</div>
<!-- /ko -->
<div class="product-item-pricing">
<!-- ko if: canApplyMsrp -->
<div class="details-map">
<span class="label" data-bind="i18n: 'Price'"></span>
<span class="value" data-bind="i18n: 'See price before order confirmation.'"></span>
</div>
<!-- /ko -->
<!-- ko ifnot: canApplyMsrp -->
<!-- ko foreach: $parent.getRegion('priceSidebar') -->
<!-- ko template: {name: getTemplate(), data: item.product_price, as: 'price'} --><!-- /ko -->
<!-- /ko -->
<!-- /ko -->
<div data-bind="html: 'SKU#: ' + item.product_sku"></div>
<div data-bind="html: 'Manufacturer: ' + item.product_manufacturer"></div>
<div data-bind="html: 'Part #: ' + item.product_part_number"></div>
<div class="details-qty qty">
<label class="label" data-bind="i18n: 'Qty', attr: {
for: 'cart-item-'+item_id+'-qty'}"></label>
<input data-bind="attr: {
id: 'cart-item-'+item_id+'-qty',
'data-cart-item': item_id,
'data-item-qty': qty,
'data-cart-item-id': product_sku
}, value: qty"
type="number"
size="4"
class="item-qty cart-item-qty"
maxlength="12"/>
<button data-bind="attr: {
id: 'update-cart-item-'+item_id,
'data-cart-item': item_id,
title: $t('Update')
}"
class="update-cart-item"
style="display: none">
<span data-bind="i18n: 'Update'"></span>
</button>
</div>
</div>
<div class="product actions">
<!-- ko if: is_visible_in_site_visibility -->
<div class="primary">
<a data-bind="attr: {href: configure_url, title: $t('Edit item')}" class="action edit">
<span data-bind="i18n: 'Edit'"></span>
</a>
</div>
<!-- /ko -->
<div class="secondary">
<a href="#" data-bind="attr: {'data-cart-item': item_id, title: $t('Remove item')}"
class="action delete">
<span data-bind="i18n: 'Remove'"></span>
</a>
</div>
</div>
</div>
</div>
</li>
saya punya permintaan 2 langkah mudah di magento 2.1:
Ubah menjadi file: ->
1.DefaultItem.php Tambahkan baris:
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$this->product = $objectManager->get('Magento\Catalog\Model\Product')-
>load($this->item->getId());
*Add element into return array result:*
'short_description' => $this->product->getShortDescription(),
2.default.html Tambahkan baris:
<a data-bind="text: short_description"></a>
Saya harap ini akan membantu Anda.