Magento2 এ কার্টে পণ্য বৈশিষ্ট্য পান


21

আমি কার্ট টেমপ্লেটে একটি পণ্য বৈশিষ্ট্য দখল করার চেষ্টা করছি। তবে আমি শুধু কাজ করি না! বৈশিষ্ট্যটি স্টোরফ্রন্টের ক্যাটালগ পৃষ্ঠাগুলিতে দৃশ্যমানকে সেট করা হয়েছে = হ্যাঁ এবং পণ্য তালিকাতে ব্যবহৃত = হ্যাঁ

আমি নিম্নলিখিত টেমপ্লেটটিকে ওভাররাইড করতে একটি কাস্টম মডিউল ব্যবহার করি:

/vendor/magento/module-checkout/view/frontend/templates/cart/item/default.phtml

আমার পণ্য আছে:

$_item = $block->getItem();
$product = $_item->getProduct();

সাধারণত আমি 'নমুনা_আত্র' এর একটি বিশিষ্ট কোড সহ একটি কাস্টম অ্যাট্রিবিউট (এই ক্ষেত্রে পাঠ্য-ক্ষেত্রের প্রকারের) প্রত্যাশা করব যার মধ্যে একটির সাথে এটি উপলব্ধ থাকবে:

$product->getData('sample_attr');

অথবা

$product->getSampleAttr();

এটি ব্যবহার করে কিছু বৈশিষ্ট্য পাওয়া যায় (স্কু, ওজন, দাম ..) তবে কাস্টম বৈশিষ্ট্যের জন্যও কাজ করে না। অন্তর্ভুক্ত সহায়ক (\ ম্যাজেন্টো \ এমএসআরপি \ সহায়তাকারী \ ডেটা) এরও কোনও বৈশিষ্ট্য পদ্ধতি নেই।

আমি সমস্ত বৈশিষ্ট্যযুক্ত কোডগুলি ব্যবহার করে পেতে পারি:

   $attributes = $product->getAttributes();
   foreach($attributes as $a)
   {
     var_dump($a->getName());
   }

আমি চেষ্টা করেছি:

    $attribute = $product->getResource()->getAttribute('sample_attr');
    var_dump($attribute->getFrontend()->getValue($product));

কিন্তু এটি শূন্য ফিরে।

সুতরাং আমি কীভাবে গুণকের মান পাব?

আমি এগুলি চেষ্টা করেছি: ক্যাটালগ পৃষ্ঠায় প্রতিটি পণ্যের জন্য নির্দিষ্ট বৈশিষ্ট্য পান

ক্যাটালগ list.phtml এ আউটপুট কাস্টম পাঠ্য বৈশিষ্ট্য (ম্যাজেন্টো 2)

উত্তর:


51

এটি করার জন্য কোনও পিএইচপি কোড পরিবর্তন করার প্রয়োজন নেই।

আপনাকে কেবল এ {MODULE_NAME}/etc/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="sample_attr"/>
    </group>
</config>

মজাদার. আমি এটা ভাবিনি। আমি পরে চেষ্টা করব।
টেকজাম

আপনাকে স্বাগতম! :)
ইগোর সিডোরেনকো

2
ফ্যান্টাস্টিক! আমার জন্য কাজ কর. দেখে মনে হচ্ছে এটি magento setup:di:compileকাজ করার জন্য আমাকে দৌড়াতে হয়েছিল, তবে তা বোঝা যায়। আপনি এখানে নির্ভরতা গাছ পরিবর্তন করছেন।
সাইক্লোপজ

এটি গ্রহণযোগ্য উত্তর আইএমএইচও হওয়া উচিত। অন্যান্য উত্তরগুলি প্রতিটি কার্ট আইটেমের জন্য পণ্য মডেল লোড করার পরামর্শ দেয় যা পারফরম্যান্স কারণে ভাল ধারণা নয়, বিশেষত যখন ব্যবহারকারীদের গাড়িগুলি বড় হয়।
অ্যান্ড্রু কেট

আমি উপরে একটি কোড মেন্যু / চেকটেক্স তৈরি করেছি যার উপরে আমি কোডটি উপরে রেখেছি কিন্তু এটি কাজ করছে না আপনি আমাকে সহায়তা করতে পারবেন
তিওয়ারি

8

সুতরাং আমি যে তথ্য পরে ছিলাম তা পাওয়ার একটি উপায় খুঁজে পেয়েছি। প্রোডাক্টরপোজিটরি থেকে আমার সম্পূর্ণ পণ্যটি লোড করতে হবে! নোট করুন যে আপনি যদি এটি থেকে চেষ্টা করে লোড করেন তবে এটি \Magento\Catalog\Model\Productএকটি সিঙ্গলটনের মতো আচরণ করবে, সর্বদা আপনাকে প্রতিটি লুপের জন্য একই পণ্য দেয়।

আমি আমার মডিউল সহায়ক শ্রেণি ব্যবহার করেছি কারণ এটি পণ্য আইড থেকে পণ্য লোড করার জন্য নিম্নলিখিত পদ্ধতিটি সংজ্ঞায়িত করে:

public function __construct(
  \Magento\Framework\App\Helper\Context $context,
  \Magento\Catalog\Model\ProductRepository $productRepo
) {
  $this->_productRepo = $productRepo;
  parent::__construct($context);
  }


/**
 * Load product from productId
 *
 * @param $id
 * @return $this
 */
public function getProductById($id)
{
    return $this->_productRepo
        ->getById($id);
}

আমি সাহায্যকারীটিকে টেমপ্লেটে অন্তর্ভুক্ত করেছি:

$customHelper = $this->helper('MyCompany\MyModule\Helper\Data');

আমি সম্পূর্ণ পণ্য লোড:

$custProd = $customHelper->getProductById($product->getId());

এবং এখন আমি ব্যবহার করতে পারি:

$custProd->getSampleAttr();

এবং

$custProd->getData('sample_attr');

তথ্য পেতে।


2

যারা এখানে এসেছেন তাদের একটি সহজ সমাধানের সন্ধান করছেন, এটিই আমার পক্ষে কার্যকর হয়েছিল

আমি আমার default.phtml(ইন module-checkout/view/frontend/templates/cart/item) এটিতে যুক্ত করেছি :

<?php
    $product_id = $product->getId();
    $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
    $customProduct = $objectManager->get('Magento\Catalog\Model\Product')->load($product_id);
 ?>

তারপরে আপনি $customProduct->getData('your_attribute');সর্বদা কল করতে পারেন


2
টেমপ্লেটে, ম্যাজেন্টো আমাদের সরাসরি অবজেক্টম্যানেজার ব্যবহার করতে নিরুৎসাহিত করে। আমাদের ব্লক যুক্ত করা উচিত।
খোোয়া ট্রুংদিনহ

2
আপনার অবজেক্টম্যানেজারটি সরাসরি টেমপ্লেটে বা ব্লকে ব্যবহার করা উচিত নয়।
ocornu

আপনি যদি কেবল কীভাবে যত্নশীল না হন তবে এটি 100% কাজ করে।
এ। লাল

1

সঠিক অ্যাডমিন সেটিংস সহ, eav_attributeস্কেল টেবিলের উত্স মডেলটি সেট করা থাকলে কাস্টম বৈশিষ্ট্যগুলি চেকআউট পৃষ্ঠাতে পণ্য অবজেক্টে লোড করা হয় NULL। সুতরাং আপনি $product->getSampleAttr()চেকআউট পৃষ্ঠাতে সরাসরি অ্যাক্সেস করতে সক্ষম হন ।

তবে যদি অ্যাট্রিবিউটটির একটি উত্স মডেল থাকে তবে Magento\Eav\Model\Entity\Attribute\Source\Tableআপনার অবশ্যই পণ্যটি সংগ্রহস্থল থেকে লোড করতে হবে।

একটি নতুন সহায়ক তৈরি করুন এবং নির্মাণকারীর মধ্যে পণ্য সংগ্রহস্থল যুক্ত করুন এখনও ২.২..6 (টেকজামের সমাধান হিসাবে) এ কাজ করছে

আপনি যদি আইটেমটি সরবরাহকারীকে ওভাররাইড করার চেষ্টা করেন (চেকআউট পৃষ্ঠাতে ডাকা হয়) এবং এখানে পণ্য সংগ্রহস্থল যুক্ত করুন দয়া করে নোট করুন same

এখানে চিত্র বর্ণনা লিখুন


0

উদ্ধৃতি / কার্টের মধ্যে পাওয়া পণ্য সামগ্রীতে কাস্টম বৈশিষ্ট্যগুলি অন্তর্ভুক্ত নয়, সুতরাং আপনি এটি getData ('কাস্টম_অ্যাট্রিবিউট') ফাংশনটির মাধ্যমে পেতে পারেন না। আপনার যা করা দরকার তা হ'ল উদ্ধৃতি পণ্য অবজেক্টটি থেকে পণ্যটির আইডি ফিরে পাওয়া এবং পণ্য সংগ্রহস্থল ব্যবহার করে পণ্যটি লোড করা, একবার আপনি সংগ্রহস্থলের মাধ্যমে পণ্যটি লোড করে ফেললে আপনি এতে নির্দিষ্ট করা কাস্টম বৈশিষ্ট্যগুলি সহ সমস্ত ডেটা পেতে পারেন, পরে আপনি এটি পেতে getData ('কাস্টম_অ্যাট্রিবিউট') ফানসিটন ব্যবহার করতে পারেন।

আশা করি তা বোধগম্য হয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.