শিরোনামের মিনি-কার্টে পণ্য এসকিউ পাওয়া


10

আমি SKUম্যাজেন্টো 2 সাইটের মিনি-কার্টে পণ্যটি প্রদর্শন করতে সক্ষম হতে চাই । তবে KnockoutJSঅতিরিক্ত পণ্যের তথ্য কীভাবে টানতে হবে তা আমি নিশ্চিত নই । যে টেম্পলেটটি বলা হচ্ছে তা এখানে:

বিক্রেতা / Magento / মডিউল-চেকআউট / দৃশ্য / ফ্রন্টএন্ড / ওয়েব / টেমপ্লেট / minicart / আইটেম / default.html

এবং এর মতো কোড রয়েছে:

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

সুতরাং আমার সরাসরি প্রশ্নটি হবে: পণ্য সেট করার মানগুলি কোথায় এবং আমি কীভাবে সেগুলিকে পণ্যের বিবরণ যুক্ত করতে বা সরাতে এগুলি পরিবর্তন করতে পারি?

উত্তর:


12

যতদূর আমি জানি, শিরোলেখী মাইনিকার্ট গ্রাহকের ডেটা থেকে ডেটা পাবে

বিক্রেতা / Magento / মডিউল-চেকআউট / দৃশ্য / ফ্রন্টএন্ড / ওয়েব / JS / দৃশ্য / minicart.js

define([
    'uiComponent',
    'Magento_Customer/js/customer-data',
    'jquery',
    'ko',
    'sidebar'
], function (Component, customerData, $, ko) {
    'use strict';
    ......
    this.cart = customerData.get('cart');
    ......
}

গ্রাহকের ডেটা জেএস সন্ধান করুন vendor/magento/module-customer/view/frontend/web/js/customer-data.js, আমরা স্থানীয় স্টোরেজ থেকে গ্রাহকের ডেটা পেতে পারি। উদাহরণস্বরূপ, আপনার ব্রাউজার কনসোলে, লাইনটি চালান:, localStorage.getItem('mage-cache-storage')আমরা কার্টের তথ্যও পেতে পারি। এখানে চিত্র বর্ণনা লিখুন

{
  "cart": {
    "summary_count": 1,
    ....
    "items": [
      {
      ......   
        "qty": 1,
        "item_id": "11728",
        "configure_url": "http://magento2-demo/checkout/cart/configure/id/11728/product_id/1817/",
        "is_visible_in_site_visibility": true,
        "product_name": "Breathe-Easy Tank",
        "product_url": "http://magento2-demo/breathe-easy-tank.html",
        "product_has_url": true,
        "canApplyMsrp": false
      }
    ],
    .......
  }
}

বিক্রেতা / ম্যাজেন্টো / মডিউল-চেকআউট / গ্রাহকদাটা / ডিফল্ট আইটেম.এফপি নেভিগেট করুন

protected function doGetItemData()
    {
       .......
        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(),
           .....
    }

বিক্রেতা / Magento / মডিউল-চেকআউট / CustomerData / AbstractItem.php

/**
 * {@inheritdoc}
 */
public function getItemData(Item $item)
{
    $this->item = $item;
    return \array_merge(
        ['product_type' => $item->getProductType()],
        $this->doGetItemData()
    );
}

এসকিউ আইটেমটি পেতে, আমার মনে হয় আমাদের ডেটা যুক্ত করতে হবে getItemData()( প্লাগইন দিয়ে চেষ্টা করা উচিত )। এবং তারপরে এইচটিএমএল টেমপ্লেটটি ওভাররাইড করুন vendor/magento/module-checkout/view/frontend/web/template/minicart/item/default.html

 <div class="product-item-details">

                    <!-- ko text: product_sku --><!-- /ko -->

Magento 2.1.0 সংস্করণ আপডেট করুন

ম্যাজেন্টো ২.১.০-এ, আপনাকে কেবল ওভাররাইড করতে হবে default.html। এর কারণ পদ্ধতিটিতে doGetItemDataইতিমধ্যে পণ্য স্কু রয়েছে।


ধন্যবাদ! এই প্রশ্নের এক টন 'হাওস' ভরা!
সার্কেলিক্স

@ খোয়া ট্রুংডিনহ দুর্দান্ত উত্তরের জন্য ধন্যবাদ। এটি নিখুঁত কাজ করে। আপনি কি দয়া করে আমাকে বলতে পারেন কীভাবে আমরা চেকআউট সংক্ষিপ্ত বিভাগে এটি করতে পারি। আমি অনেক খুঁজে পেয়েছি তবে চেকআউট সংক্ষিপ্তসারের পরিবর্তে নামের পরিবর্তে নতুন বৈশিষ্ট্য যুক্ত করতে এমন একটি অবস্থান পাচ্ছি না।
রোহিত গোয়েল

1
সতর্কতা অবলম্বন করুন, যদি আপনার কনফিগারযোগ্য পণ্য থাকে তবে আপনার এই শ্রেণিকেও ওভাররাইড করতে হবে: Magento\ConfigurableProduct\CustomerData\ConfigurableItemএবং শ্রেণিবদ্ধ পণ্যের জন্য:Magento\GroupedProduct\CustomerData\GroupedItem
ফ্রাঙ্ক গার্নিয়ার

@ ফ্র্যাঙ্কগার্নিয়ার আমি সবেমাত্র যাচাই করে দেখেছি যে আমাদের এই ক্লাসগুলি ওভাররাইড করার দরকার নেই। কেবল যুক্ত করুন !-- ko text: product_sku --><!-- /ko -->, স্কু কনফিগারযোগ্য পণ্যের জন্য প্রদর্শিত হবে। আমার ম্যাজেন্টো সংস্করণটি 2.1.5 .5
খোয়া ট্রুংদিনহ

1
প্রোডাক্ট_স্কুর জন্য সঠিক, তবে আপনার যদি অতিরিক্ত তথ্য যোগ করার প্রয়োজন হয় তবে স্থানীয়ভাবে উপস্থিত না হওয়া, এই ক্লাসগুলি সম্পর্কে সাবধান, পরিবর্তে প্লাগইন ব্যবহার করার চেষ্টা করুন use
ফ্রাঙ্ক গার্নিয়ার

7

প্রথমত, মিনিকার্ট টেমপ্লেটে আইটেম পাওয়ার প্রবাহ সম্পর্কে @ খোয়া ট্রুংডিনাহের কাছ থেকে খুব ভাল ব্যাখ্যা।

পণ্যের বিবরণ যুক্ত করতে বা সরানোর জন্য আমি কীভাবে সেগুলি পরিবর্তন করতে পারি?

আমি একটি উপায় খুঁজে পেয়েছি কীভাবে আপনি পণ্যের কাস্টম বৈশিষ্ট্যগুলির সাথে মাইনিকার্ট টেম্পলেট প্রসারিত করতে পারেন। এটি করতে প্রথমে আপনাকে ডিআই পছন্দগুলি সহ বিক্রেতার / ম্যাজেন্টো / মডিউল-চেকআউট / গ্রাহকদাটা / ডিফল্টআইটেম.পিএফকে ওভাররাইড করতে হবে

অ্যাপ্লিকেশন / কোড / বিক্রেতা / মডিউল / ইত্যাদি / di.xML তৈরি করুন বা ডিফল্ট আইটেমের ওভাররাইড করুন

<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

ফাইল: অ্যাপ / কোড / বিক্রেতা / মডিউল / পছন্দসমূহ / মিনিকার্টআইটেম.পিপি p

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()),
        ];
    }
}

লক্ষ্য করুন যে আমি ইনজেকশন দিচ্ছি

\ ম্যাজেন্টো \ ক্যাটালগ \ মডেল \ পণ্য $ পণ্যমডেল

কনস্ট্রাক্ট পদ্ধতিতে কারণ আমার কাস্টম_ট্রিবিউট অ্যাক্সেস করতে আমার পুরো পণ্য ডেটা লোড করতে হবে। এর থেকে আরও ভাল উপায় থাকলে আমাকে বলুন।

এবং শেষ পর্যন্ত আপনি নতুন বৈশিষ্ট্যটি এতে প্রদর্শন করতে পারেন

দৃশ্য / ফ্রন্টএন্ড / ওয়েব / টেমপ্লেট / minicart / আইটেম / default.html:

 <div class="product-item-details">

                    <!-- ko text: product_custom_attribute --><!-- /ko -->

ব্যবহার 'product_sku' => $this->item->getProduct()->getSku()স্কুতে টানতে কাজ করে, সুতরাং যখন আমাকে এটি \Magento\Catalog\Model\Product $productModelধরার দরকার নেই , আমি এটি অন্য কিছু পণ্য তথ্য দখল করতে ব্যবহার করব। অবশেষে আমি অগ্রাধিকার পেয়েছি এবং চলছে, সুতরাং আপনার পদ্ধতিটি কবজির মতো কাজ করে!
অগস্ট সার্কিট 22 '

1
কাস্টম বৈশিষ্ট্যের জন্য আপনার $productModelপণ্যটি সমস্ত বৈশিষ্ট্যের সাথে লোড করতে হবে এবং তারপরে সেগুলি পুনরুদ্ধার করতে হবে $this->helper। যদি এটি কাজ করে তবে আপনি আমার উত্তরটিকে উজ্জ্বল করতে পারেন।
মিরোস্লাভ পেট্রফ

1
আমি করেছি, এবং তারা আমাকে একবার ভোট দিতে দিয়েছে। আমি যদি আপনার উত্তরটিকে সঠিক হিসাবে খোয়া এর মত চিহ্নিত করতে পারি তবে আমি চাই। আমি চারপাশে পোস্ট করব এবং দেখব যে আমরা আপনার পক্ষে আরও বেশি ভোট পেতে পারি কিনা, কারণ আমি এখনও অন্য কোথাও এই সমস্যার কোনও উত্তর দেখতে পাইনি এবং এটি পার্কটি আটকায়।
حلقি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.