Magento 2: उत्पाद गुण का चयन विकल्प आईडी, विन्यास योग्य उत्पाद के लिए लेबल प्राप्त करें


19

Magento में विकल्प आईडी के आधार पर विकल्प मूल्य कैसे प्राप्त करें, या विकल्प कोड के आधार पर विकल्प आईडी प्राप्त करें?

उदाहरण: लेबल "रेड" से रंग विशेषता विकल्प आईडी 10 कैसे प्राप्त करें, और यदि विकल्प आईडी 10 है तो "रेड" मान प्राप्त करें?

जवाबों:


46

आप इसे 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

आप मुझे बता सकते हैं क्या) $ attr-> usesSource का उपयोग (है, जबकि विशेषता विकल्प हो रही
Jaisa

मुझे इस शर्त के बिना विकल्प मिले कि आपने अपने कोड में क्या उल्लेख किया है
Jaisa

क्या आप समझा सकते हैं, अगर मैं गलत हूँ
Jaisa

1
एकदम सही राकेश भाई मल्लिसु क्यारेक अवध मा :)! मेरा दिन बना दिया!!! +1 :)
सागरपंचल

धन्यवाद, मैंने इस कोड का उपयोग किया था लेकिन अब मैं मुद्दों का सामना कर रहा हूं। Magento.stackexchange.com/questions/256510/… देखें । क्या एक ही परिणाम प्राप्त करने के लिए एक वैकल्पिक विधि है?
Akif

12

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 फ़ाइल का उपयोग करें। यदि कुछ परिवर्तन आपको केवल एक स्थान पर बदलने की आवश्यकता है।


आपने अभी-अभी अपना दिन बचाया है, मैं 'ड्रॉपडाउन' पाठ प्राप्त करने में सक्षम नहीं था, और मैंने यह पाया। तो धन्यवाद।
अरुण कर्णावत


7

मैं एक सरल समाधान मिलता है। यह केवल उत्पाद के लिए विशेषता कोड के साथ विशेषता मान दिखाएगा। मैंने कैटलॉग और विवरण पृष्ठ में जाँच की है।

कोड है

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

यहाँ आकार विशेषता नाम है।

संदर्भ: विक्रेता / Magento / मॉड्यूल-कैटलॉग / दृश्य / दृश्य / टेम्पलेट / उत्पाद / दृश्य / विशेषता .phtml लाइन: 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);
         }
    }

phtml फ़ाइल में

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

हाय @ क्वैसर, क्या हम इंस्टॉलर के बिना प्रोग्रामेटिक रूप से विशेषता बना सकते हैं
जाफर पिंजर

@ जफरपिनजर हां आप ऐसा कर सकते हैं। एक ही कोड का उपयोग करना।
क़ैसर सत्ती

2

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

आप इस कोड को मूल Magento में कहाँ देखते हैं? मुझे getResource()इस मॉडल में विधि भी नहीं मिल रही है: github.com/magento/magento2/blob/2.3-develop/app/code/Magento/…
ziki

getResource()एक विधि जो पहले अस्तित्व में थी। V2.2.2 में जैसा कि मैंने उल्लेख किया है कि यह पहले ही पदावनति के लिए स्लेट किया गया था। 2.3-विकसित शाखा में मुझे संदेह है कि यह पूरा हो चुका है। इस प्रकार मेरे उदाहरण को उस कार्य की आवश्यकता नहीं है।
जोशुआ फ्रिक

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)

चरण 3) आपका कोड इस लूप के अंदर होगा। नीचे दिए गए कोड को उस स्थान पर रखें जहां आप विशेषता लेबल प्रदर्शित करना चाहते हैं।

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

जो भी आपकी विशेषता का नाम है, बस अपने_attribute_code को बदलें ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.