मैं Magento 2 में अपने मिनीकार्ट को अनुकूलित करना चाहता हूं। मुझे 3 विशेषताओं को जोड़ने की आवश्यकता है


12

मैं Magento 2 में अपने मिनीकार्ट को अनुकूलित करना चाहता हूं। मुझे 3 विशेषताएँ जोड़ने की आवश्यकता है: SKU, निर्माता और निर्माता भाग संख्या। ये मौजूदा विशेषताएँ हैं। मैं देखता हूं कि आउटपुट वैल्यूज को कहां से जोड़ना है लेकिन कहां से उन्हें कॉल करना है।

जवाबों:


26

आप ऐसा करने के लिए एक मॉड्यूल बना सकते हैं। यह उन विशेषताओं को डेटा सरणी में जोड़ने के लिए एक प्लगइन का उपयोग करेगा जो नॉकआउट जेएस टेम्पलेट द्वारा पढ़ा जाता है। फिर हमें इन मूल्यों को प्रदर्शित करने के लिए टेम्पलेट को ओवरराइड करना होगा।

यह मॉड्यूल निर्देशिका है:

|   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 पहले से ही डेटा में मौजूद है इसलिए इसे जोड़ने की कोई आवश्यकता नहीं है।

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.htmlMagento/Checkout/view/frontend/web/template/minicart/item/default.html लाइन 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>

पंजीकरण में क्या है। पीएचपी और मॉड्यूल.एक्सएमएल?
मैथ्यू मैक्लेनन 12

मैंने इसे जोड़ा और अब मेरा आउटपुट "UNDEFINED" बताता है। क्या इसका मतलब यह है कि इसका काम करना लेकिन मेरे पास मेरे गुण गलत हैं?
मैथ्यू मैक्लेनन

Registration.php और module.xml तुम बाहर की जाँच करनी चाहिए बॉयलरप्लेट फ़ाइलें हैं, इस ट्यूटोरियल alanstorm.com/magento_2_mvvm_mvc कैसे एम 2 मॉड्यूल परिभाषित कर रहे हैं पर एक संभाल पाने के लिए। क्या आप शायद आपके द्वारा की जा रही त्रुटि का स्क्रीनशॉट पोस्ट कर सकते हैं या अधिक विशिष्ट हो सकते हैं?
एरोन एलन

@AaronAllen, मेरे लिए इसका काम है, लेकिन मैं उसी मिनीकार्ट के content.html को भी ओवरराइड करना चाहता हूं और उस फाइल में कुछ डायनामिक डेटा जोड़ना चाहता हूं। क्या आप कृपया बता सकते हैं कि मैं इसे कैसे प्राप्त कर सकता हूं। अग्रिम में धन्यवाद !
आशीष जगनानी

2
इसके बजाय यदि विशेषताओं को लगभगGetItemData () में लोड किया जा रहा है तो संभव है कि उन्हें / etc_attributes.xml में जोड़ा जाए। ऐसा करने के बाद कि विशेषताओं को $ आइटम-> getProduct () -> getAttributeText ('attribute_code)) के साथ एक्सेस किया जा सकता है; _productRepo की अब आवश्यकता नहीं है।
एंड्रियास रिडमुएलर

0

मैंने अपनी क्वेरी मैगनेटो २.१ में २ सरल चरणों में लिखी है:

फ़ाइल में बदलें: ->

1.DefaultItem.php पंक्ति जोड़ें:

    $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 पंक्ति जोड़ें:

   <a data-bind="text: short_description"></a>

उम्मीद है इससे आपको मदद मिलेगी।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.