উত্তর:
আপনি এটি ম্যাজেন্টো 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
ম্যাজেন্টোর সেরা অনুশীলন হ'ল এটি এক্সএমএল এর মাধ্যমে করা।
একটি প্রমিত বৈশিষ্ট্য পেতে চাই 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 যদি কিছু পরিবর্তিত হয় তবে এটিকে কেবল এক জায়গায় বদলাতে হবে।
আমার জন্য কাজ করেছেন
$_product->getResource()->getAttribute('your_attribute_code')->getFrontend()->getValue($_product);
আমি একটি সহজ সমাধান পেতে। এটি কেবল কোনও পণ্যের জন্য অ্যাট্রিবিউট কোডের সাথে বিশিষ্ট মানটি দেখায়। আমি ক্যাটালগ এবং বিশদ পৃষ্ঠাতে পরীক্ষা করেছি।
কোডটি হল
<?php echo $_product->getAttributeText('size'); ?>
এখানে আকারটি বৈশিষ্ট্যের নাম।
রেফারেন্স: বিক্রেতা / ম্যাজেন্টো / মডিউল-ক্যাটালগ / ভিউ / ফ্রন্টএন্ড / টেম্পলেট / পণ্য / ভিউ / অ্যাট্রিবিউট.এফটিএমএল লাইন: 35
কারখানার পদ্ধতি ব্যবহার করুন
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');
$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/...
getResource()
আগে এমন একটি পদ্ধতি ছিল যা বিদ্যমান ছিল। V2.2.2 এ আমি উল্লেখ করেছি যে এটি ইতিমধ্যে অবমূল্যায়নের জন্য নির্ধারিত ছিল। ২.৩-বিকাশকারী শাখায় আমার সন্দেহ হয় এটি সম্পূর্ণ হয়ে গেছে। সুতরাং আমার উদাহরণ যা ফাংশন প্রয়োজন হয় না।
সবার জন্য এখানে আসে।
আপনার যদি কোনও পণ্য সত্তা না থাকে তবে আপনি এই পদক্ষেপগুলি সহ একটি বিকল্প মান পুনরুদ্ধার করতে পারেন।
\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]');
আপনি অ্যাট্রিবিউট লেবেল পাওয়ার জন্য ব্যবহার করতে পারেন
$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);
এই কোড চেষ্টা করুন
পদক্ষেপ 1) প্রথমে আপনাকে পণ্যগুলি লোড করতে হবে
$_productCollection = $block->getLoadedProductCollection();
পদক্ষেপ 2) পণ্য তালিকা পৃষ্ঠাতে, এই জাতীয় পণ্য তালিকার জন্য একটি ফোরচ লুপ থাকবে
foreach ($_productCollection as $_product)
স্টিপি ৩) আপনার কোডটি এই লুপের অভ্যন্তরে থাকবে below নীচের কোডটি এমন কোনও জায়গায় রাখুন যেখানেই আপনি অ্যাট্রিবিউট লেবেল প্রদর্শন করতে চান।
$_product->getResource()->getAttribute('your_attribute_code')->getFrontend()->getValue($_product);
আপনার অ্যাট্রিবিউটটির নাম অনুসারে আপনার_ট্রিবিউট_ কোডটি প্রতিস্থাপন করুন ।