जवाबों:
आप इसे magento 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
Magento में सबसे अच्छा अभ्यास इसे xml के माध्यम से करना है।
एक मानक विशेषता प्राप्त करने के लिए जैसे 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>
यह एक इनपुट विशेषता या textarea का मूल्य प्राप्त करेगा। यदि आपके पास ड्रॉपडाउन है, तो आपको पाठ प्रकार का उपयोग करना चाहिए, इसलिए इस पंक्ति को तर्कों की सूची में जोड़ें:
<argument name="at_type" xsi:type="string">text</argument>
एक विशेषता प्राप्त करने के लिए फाइल बनाने या किसी php कोड को लिखने की आवश्यकता नहीं है। इस तरह से आपके पास स्थिरता होगी और सभी विशेषताओं के लिए एक ही विशेषता .phtml फ़ाइल का उपयोग करें। यदि कुछ परिवर्तन आपको केवल एक स्थान पर बदलने की आवश्यकता है।
मेरे लिए काम किया
$_product->getResource()->getAttribute('your_attribute_code')->getFrontend()->getValue($_product);
मैं एक सरल समाधान मिलता है। यह केवल उत्पाद के लिए विशेषता कोड के साथ विशेषता मान दिखाएगा। मैंने कैटलॉग और विवरण पृष्ठ में जाँच की है।
कोड है
<?php echo $_product->getAttributeText('size'); ?>
यहाँ आकार विशेषता नाम है।
संदर्भ: विक्रेता / Magento / मॉड्यूल-कैटलॉग / दृश्य / दृश्य / टेम्पलेट / उत्पाद / दृश्य / विशेषता .phtml लाइन: 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);
}
}
phtml फ़ाइल में
$this->getAttributeOptionId('color','//optionLabel');
$this->getAttributeOptionText('color','//optionId');
$product->getResource()
कम से कम v2.2.2 में पदावनत होने के बारे में एक DocBlock नोट है और इसलिए मैं इसका उपयोग करने में संकोच कर रहा था। पहले से ही इस पृष्ठ पर लोगों से प्रेरित होने के बजाय इस समाधान के साथ आया:
$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 में जैसा कि मैंने उल्लेख किया है कि यह पहले ही पदावनति के लिए स्लेट किया गया था। 2.3-विकसित शाखा में मुझे संदेह है कि यह पूरा हो चुका है। इस प्रकार मेरे उदाहरण को उस कार्य की आवश्यकता नहीं है।
सभी के लिए यहां आता है।
यदि आपके पास कोई उत्पाद इकाई नहीं है, तो आप इस चरणों के साथ एक विकल्प मान प्राप्त कर सकते हैं।
\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)
चरण 3) आपका कोड इस लूप के अंदर होगा। नीचे दिए गए कोड को उस स्थान पर रखें जहां आप विशेषता लेबल प्रदर्शित करना चाहते हैं।
$_product->getResource()->getAttribute('your_attribute_code')->getFrontend()->getValue($_product);
जो भी आपकी विशेषता का नाम है, बस अपने_attribute_code को बदलें ।