ম্যাজেন্টো 2: পণ্যের বৈশিষ্ট্যের নির্বাচন বিকল্প আইডি, কনফিগারযোগ্য পণ্যের জন্য লেবেল পান


19

ম্যাজেন্টোতে বিকল্প আইডির উপর ভিত্তি করে কোনও বিকল্প মান কীভাবে পাবেন, বা বিকল্প কোডের ভিত্তিতে কোনও বিকল্প আইডি পাবেন?

উদাহরণ: "রেড" লেবেল থেকে বর্ণ বৈশিষ্ট্য বিকল্প আইডি 10 কীভাবে পাবেন এবং বিকল্প আইডি 10 হলে মান "রেড" পাবেন?

উত্তর:


46

আপনি এটি ম্যাজেন্টো 1 এর মতোই করতে পারেন,

বিশদ সম্পর্কিত আরও তথ্য, ভিজিট করুন, কনফিগারযোগ্য পণ্য থেকে বিকল্প আইডি এবং লেবেল পান

// পণ্য অবজেক্ট থেকে বিকল্প আইডির ভিত্তিতে বিকল্প লেবেল পান

$optionId = 10;

$attr = $_product->getResource()->getAttribute('color');
 if ($attr->usesSource()) {
       $optionText = $attr->getSource()->getOptionText($optionId);
 }
//get option text ex. Red

// বিকল্প লেবেলের উপর ভিত্তি করে বিকল্প আইডি পান

$attr = $_product->getResource()->getAttribute('color');
 if ($attr->usesSource()) {
       $option_id = $attr->getSource()->getOptionId("Red");
 }

//get option id ex. 10

অ্যাট্রিবিউট বিকল্পগুলি পাওয়ার সময় $ অ্যাটর্স-> ইউসোর্স () ব্যবহারগুলি কী তা আমাকে বলতে পারেন
জয়সা

আপনি আপনার কোডে যা উল্লেখ করেছেন তা যদি শর্ত না করেই বিকল্পগুলি পেয়েছি
জয়সা

আপনি কি ব্যাখ্যা করতে পারেন, আমি যদি ভুল হয়ে
যাই

1
নিখুঁত রাকেশ ভাই ম্লিশু কিয়ারেক আবাদ মা :)! আমার দিন তৈরি !!! +1 :)
সাগরপঞ্চল

ধন্যবাদ, আমি এই টুকরো কোডটি ব্যবহার করেছি তবে আমি এখন সমস্যার মুখোমুখি হয়েছি। Magento.stackexchange.com / জিজ্ঞাসা / 256510/ … দেখুন । একই ফল অর্জনের জন্য কি বিকল্প পদ্ধতি আছে?
আকিফ

12

ম্যাজেন্টোর সেরা অনুশীলন হ'ল এটি এক্সএমএল এর মাধ্যমে করা।

একটি প্রমিত বৈশিষ্ট্য পেতে চাই brandআপনি ভালো কিছু করতে catalog_product_view.xmlউদাহরণস্বরূপ:

<referenceBlock name="product.info.main">
    <block class="Magento\Catalog\Block\Product\View\Description" name="product.info.brand" template="product/view/attribute.phtml" before="-">
        <arguments>
            <argument name="at_call" xsi:type="string">getBrand</argument>
            <argument name="at_code" xsi:type="string">brand</argument>
            <argument name="css_class" xsi:type="string">brand</argument>
            <argument name="at_label" xsi:type="string">none</argument>
            <argument name="add_attribute" xsi:type="string">itemprop="brand"</argument>
        </arguments>
    </block>
</referenceBlock>

এটি একটি ইনপুট অ্যাট্রিবিউট বা টেক্সটরিয়ার মান পাবে। আপনার যদি ড্রপডাউন থাকে তবে আপনার পাঠ্য প্রকারটি ব্যবহার করা উচিত, সুতরাং যুক্তিগুলির তালিকায় এই লাইনটি যুক্ত করুন:

<argument name="at_type" xsi:type="string">text</argument>

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


আপনি কেবল আমার দিনটি বাঁচিয়েছেন, আমি 'ড্রপডাউন' পাঠ্যটি পেতে সক্ষম হইনি এবং এটি আমি পেয়েছি। সূতরাং ধন্যবাদ.
অরুণ করনাওয়াত


7

আমি একটি সহজ সমাধান পেতে। এটি কেবল কোনও পণ্যের জন্য অ্যাট্রিবিউট কোডের সাথে বিশিষ্ট মানটি দেখায়। আমি ক্যাটালগ এবং বিশদ পৃষ্ঠাতে পরীক্ষা করেছি।

কোডটি হল

<?php echo $_product->getAttributeText('size'); ?>

এখানে আকারটি বৈশিষ্ট্যের নাম।

রেফারেন্স: বিক্রেতা / ম্যাজেন্টো / মডিউল-ক্যাটালগ / ভিউ / ফ্রন্টএন্ড / টেম্পলেট / পণ্য / ভিউ / অ্যাট্রিবিউট.এফটিএমএল লাইন: 35


6

কারখানার পদ্ধতি ব্যবহার করুন

   protected $_attributeLoading;

   public function __construct( 
        .....
          \Magento\Catalog\Model\ResourceModel\ProductFactory   $attributeLoading,  
          ....
                                ) {
            parent::__construct($context);

            ....
            $this->_attributeLoading = $attributeLoading;
            ....

    }


   public function getAttributeOptionId($attribute,$label)
    {
        $poductReource=$this->_attributeLoading->create();
        $attr = $poductReource->getAttribute($attribute);
         if ($attr->usesSource()) {
                return  $option_id = $attr->getSource()->getOptionId($label);
         }
    }
   public function getAttributeOptionText($attribute,$label)
    {
        $poductReource=$this->_attributeLoading->create();
        $attr = $poductReource->getAttribute($attribute);
         if ($attr->usesSource()) {
                return  $option_Text = $attr->getSource()->getOptionText($label);
         }
    }

পিএইচটিএমএল ফাইলে

  $this->getAttributeOptionId('color','//optionLabel');
  $this->getAttributeOptionText('color','//optionId');

হাই @ কায়সার, আমরা কি ইনস্টলার ছাড়াই প্রোগ্রাম্যাটিকভাবে অ্যাট্রিবিউট তৈরি করতে পারি
জাফর পিনজার

@ জাফরপিনজার হ্যাঁ আপনি এটি করতে পারেন। একই কোড ব্যবহার করে।
কায়সার সত্তি

2

$product->getResource()কমপক্ষে v2.2.2 এ অবমানিত হওয়ার বিষয়ে একটি ডকব্লক নোট রয়েছে এবং তাই আমি এটি ব্যবহার করে কোডটি দ্বিধায় পড়েছিলাম। ইতিমধ্যে এই পৃষ্ঠায় থাকা বিষয়গুলির দ্বারা অনুপ্রেরণার পরিবর্তে এই সমাধানটি নিয়ে এসেছেন:

$optionId = $product->getDataByKey('attribute_code');
$optionText = null;
$attributes = $product->getAttributes();
if ($optionId && array_key_exists('attribute_code', $attributes)) {
    $attr = $attributes['attribute_code'];
    if ($attr->usesSource()) {
        $optionText = $attr->getSource()->getOptionText($optionId);
    }
}
if ($optionText) {
    //do something with $optionText
}

রেফারেন্সের জন্য এটি AbstractModel.php এ পদ্ধতি

/**
 * Retrieve model resource
 *
 * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 * @deprecated 101.0.0 because resource models should be used directly
 */
public function getResource()
{
    return $this->_getResource();
}

আপনি মূল কোডটিতে এই কোডটি দেখতে পাচ্ছেন? আমি এমনকি এটি করতে পারবে না getResource(): এই মডেল পদ্ধতি github.com/magento/magento2/blob/2.3-develop/app/code/Magento/...
zitix

getResource()আগে এমন একটি পদ্ধতি ছিল যা বিদ্যমান ছিল। V2.2.2 এ আমি উল্লেখ করেছি যে এটি ইতিমধ্যে অবমূল্যায়নের জন্য নির্ধারিত ছিল। ২.৩-বিকাশকারী শাখায় আমার সন্দেহ হয় এটি সম্পূর্ণ হয়ে গেছে। সুতরাং আমার উদাহরণ যা ফাংশন প্রয়োজন হয় না।
জোশুয়া ফ্রাখ

1

সবার জন্য এখানে আসে।

আপনার যদি কোনও পণ্য সত্তা না থাকে তবে আপনি এই পদক্ষেপগুলি সহ একটি বিকল্প মান পুনরুদ্ধার করতে পারেন।

\Magento\Eav\Api\AttributeRepositoryInterfaceআপনার ক্লাসে ইনজেক্ট করুন

public function __construct(
    ...
    \Magento\Eav\Api\AttributeRepositoryInterface $attributeRepository,
    ...
) {
    ...
    $this->attributeRepository = $attributeRepository;
    ...
}

বৈশিষ্ট্য উদাহরণ পেতে রেপো ব্যবহার করুন

// 4 is the default entity_type_id for product
$attribute = $this->attributeRepository->get('4', '[attribute_code]');

$attributeবিকল্প মান থেকে বিকল্প আইডি পেতে ব্যবহার করুন

$optionId = $attribute->getSource()->getOptionId('[option_value]');

1

আপনি অ্যাট্রিবিউট লেবেল পাওয়ার জন্য ব্যবহার করতে পারেন

$product->getResource()->getAttribute($key)->getFrontend()->getLabel($product);

আপনি অবজেক্ট ম্যানেজার ব্যবহার করতে পারেন:

$pid = 1;
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$pdata = $objectManager->create('Magento\Catalog\Model\Product')->load($pid);

$getlable = $pdata->getResource()->getAttribute($key)->getFrontend()->getLabel($pdata);

0

এই কোড চেষ্টা করুন

পদক্ষেপ 1) প্রথমে আপনাকে পণ্যগুলি লোড করতে হবে

$_productCollection = $block->getLoadedProductCollection();

পদক্ষেপ 2) পণ্য তালিকা পৃষ্ঠাতে, এই জাতীয় পণ্য তালিকার জন্য একটি ফোরচ লুপ থাকবে

foreach ($_productCollection as $_product)

স্টিপি ৩) আপনার কোডটি এই লুপের অভ্যন্তরে থাকবে below নীচের কোডটি এমন কোনও জায়গায় রাখুন যেখানেই আপনি অ্যাট্রিবিউট লেবেল প্রদর্শন করতে চান।

$_product->getResource()->getAttribute('your_attribute_code')->getFrontend()->getValue($_product);

আপনার অ্যাট্রিবিউটটির নাম অনুসারে আপনার_ট্রিবিউট_ কোডটি প্রতিস্থাপন করুন ।

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