Во-первых, очень хорошее объяснение от @Khoa TruongDinh о том, как получить элемент в шаблоне мини-карты.
как я могу изменить их, чтобы добавить или удалить информацию о продукте?
Я нашел способ, как можно расширить шаблон миникарты с помощью пользовательских атрибутов продукта. Для этого сначала нужно переопределить vendor / magento / module-checkout / CustomerData / DefaultItem.php с настройками DI
Создать приложение / код / поставщик / модуль / etc / di.xml или переопределить объект DefaultItem
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<preference for="Magento\Checkout\CustomerData\DefaultItem" type="Vendor\Module\Preferences\MiniCartItem" />
</config>
Затем создайте новый объект для переопределения метода doGetItemData () и добавьте custom_attribute с ключом product_custom_attribute
Файл: app / code / Vendor / Module / Preferences / MiniCartItem.php
namespace Vendor\Module\Preferences;
class MiniCartItem extends \Magento\Checkout\CustomerData\DefaultItem
{
public function __construct(
\Magento\Catalog\Helper\Image $imageHelper,
\Magento\Msrp\Helper\Data $msrpHelper,
\Magento\Framework\UrlInterface $urlBuilder,
\Magento\Catalog\Helper\Product\ConfigurationPool $configurationPool,
\Magento\Checkout\Helper\Data $checkoutHelper,
\Magento\Catalog\Helper\Output $helper,
\Magento\Catalog\Model\Product $productModel
) {
$this->configurationPool = $configurationPool;
$this->imageHelper = $imageHelper;
$this->msrpHelper = $msrpHelper;
$this->urlBuilder = $urlBuilder;
$this->checkoutHelper = $checkoutHelper;
$this->helper = $helper;
$this->productModel = $productModel;
}
/**
* {@inheritdoc}
*/
protected function doGetItemData()
{
$imageHelper = $this->imageHelper->init($this->getProductForThumbnail(), 'mini_cart_product_thumbnail');
$product = $this->productModel->load($this->item->getProduct()->getId());
return [
'options' => $this->getOptionList(),
'qty' => $this->item->getQty() * 1,
'item_id' => $this->item->getId(),
'configure_url' => $this->getConfigureUrl(),
'is_visible_in_site_visibility' => $this->item->getProduct()->isVisibleInSiteVisibility(),
'product_name' => $this->item->getProduct()->getName(),
'product_url' => $this->getProductUrl(),
'product_has_url' => $this->hasProductUrl(),
'product_price' => $this->checkoutHelper->formatPrice($this->item->getCalculationPrice()),
'product_image' => [
'src' => $imageHelper->getUrl(),
'alt' => $imageHelper->getLabel(),
'width' => $imageHelper->getWidth(),
'height' => $imageHelper->getHeight(),
],
'product_custom_attribute' => $this->helper->productAttribute($product, $product->getCustomAttribute(), 'custom_attribute'),
'canApplyMsrp' => $this->msrpHelper->isShowBeforeOrderConfirm($this->item->getProduct())
&& $this->msrpHelper->isMinimalPriceLessMsrp($this->item->getProduct()),
];
}
}
Обратите внимание, что я делаю инъекцию
\ Magento \ Каталог \ Модель \ Product $ productModel
к методу конструкции, потому что мне нужно загрузить полные данные продукта для доступа к моему custom_attribute. Если есть лучший способ, пожалуйста, скажите мне.
И, наконец, вы можете отобразить новый атрибут в
вид / интерфейс / веб / шаблон / minicart / элемент / default.html:
<div class="product-item-details">
<!-- ko text: product_custom_attribute --><!-- /ko -->