Magento 2: Ürün özelliğinin seçim seçeneği kimliğini, yapılandırılabilir ürün etiketi alın


19

Magento'daki seçenek kimliğine dayalı bir seçenek değeri nasıl alınır veya seçenek koduna dayalı bir seçenek kimliğine nasıl ulaşılır?

Örnek: renk özniteliği seçeneği kimliği 10 "Kırmızı" etiketinden nasıl alınır ve seçenek kimliği 10 ise "Kırmızı" değeri nasıl alınır?

Yanıtlar:


46

magento 1 ile aynı şeyi yapabilirsiniz,

Ayrıntılı bilgi , Yapılandırılabilir üründen Ziyaret, Seçenek kimliği ve Etiket Al

// ürün nesnesindeki seçenek kimliğine dayalı seçenek etiketi al

$optionId = 10;

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

// seçenek etiketine göre seçenek kimliğini al

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

//get option id ex. 10

Özellik seçeneklerini alırken $ attr-> usesSource () yönteminin ne olduğunu söyleyebilir misiniz
Jaisa


Açıklayabilir misin, eğer yanılıyorsam
Jaisa

1
mükemmel rakesh bhai mlishu kyarek avad ma :)! günümü şenlendirdin!!! +1 :)
SagarPPanchal

Teşekkürler, bu kod parçasını kullandım ama şimdi sorunlarla karşı karşıyayım. Bkz. Magento.stackexchange.com/questions/256510/… . Aynı sonucu elde etmek için alternatif bir yöntem olabilir mi?
Akif

12

Magento'daki en iyi uygulama xml ile yapmaktır.

brandSizin gibi standart bir özellik elde etmek için aşağıdaki gibi bir şey yapın 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>

Bu, bir girdi özniteliğinin veya metin alanının değerini alır. Bir açılır listeniz varsa metin türünü kullanmalısınız, bu nedenle bu satırı bağımsız değişkenler listesine ekleyin:

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

Bir özellik almak için dosya oluşturmaya veya herhangi bir php kodu yazmaya gerek yok. Bu şekilde tutarlılığınız olur ve tüm öznitelikler için aynı attribute.phtml dosyasını kullanırsınız. Bir şey değişirse, yalnızca tek bir yerde değiştirmeniz gerekir.


Günümü yeni kurtardın, 'açılır' metin alamadım ve bunu buldum. çok teşekkürler.
Arun Karnawat

11

Benim için çalıştı

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

7

Basit bir çözüm elde ediyorum. bu yalnızca bir ürünün özellik koduyla özellik değerini gösterir. katalog ve ayrıntılar sayfasında check-in yaptım.

kod

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

burada boyut öznitelik adıdır.

başvuru: satıcı / magento / modül-katalog / görünüm / kullanıcı arabirimi / şablonlar / ürün / görünüm / özellik.phtml satır: 35


6

Fabrika Yöntemini Kullan

   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 dosyasında

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

merhaba @Qaisar, yükleyici olmadan programlı olarak öznitelik oluşturabilir miyiz
jafar pinjar

@jafarpinjar evet bunu yapabilirsiniz. aynı kodu kullanarak.
Qaisar Satti

2

$product->getResource()en azından v2.2.2'de kullanımdan kaldırılma hakkında bir DocBlock notu var ve bu yüzden onu kullanarak kodlamak için tereddüt vardı. Bunun yerine, bu sayfada zaten bulunanlardan ilham alarak bu çözümü buldum:

$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
}

Referans için bu AbstractModel.php yöntemidir

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

Bu kodu orijinal Magento'da nerede görüyorsunuz? getResource()Bu modelde bile yöntem bulamıyorum : github.com/magento/magento2/blob/2.3-develop/app/code/Magento/…
zitix

getResource()daha önce var olan bir yöntemdi. Daha önce de belirttiğim gibi v2.2.2'de kullanımdan kaldırılmıştı. 2.3-gelişim dalında tamamlandığından şüpheleniyorum. Böylece bu işlevi gerektirmeyen örneğim.
Joshua Fricke

1

Çünkü herkes buraya geliyor.

Herhangi bir ürün varlığınız yoksa, bu adımlarla bir seçenek değeri alabilirsiniz.

\Magento\Eav\Api\AttributeRepositoryInterfaceSınıfınıza enjekte edin

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

Özellik örneğini almak için repo'yu kullanın

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

$attributeSeçenek kimliğini seçenek değerinden almak için kullanın

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

1

özellik etiketi almak için kullanabilirsiniz

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

nesne yöneticisini kullanarak şunları yapabilirsiniz:

$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

Lütfen bu kodu deneyin

Adım 1) Önce ürünleri yüklemelisiniz

$_productCollection = $block->getLoadedProductCollection();

Adım 2) Ürün listeleme sayfasında, bunun gibi ürünleri listelemek için bir ön döngü olacak

foreach ($_productCollection as $_product)

Adım3) Kodunuz bu döngünün içinde olacaktır. Aşağıdaki kodu, özellik etiketini görüntülemek istediğiniz yere yerleştirin.

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

Sadece yerine your_attribute_code sizin nitelik olarak adlandırılır ne olursa olsun.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.