Dapatkan nilai atribut multiselect yang dipilih

14

Ambil produk "mobil" berikut: Volkswagen Golf .

Ini memiliki atribut multiselect car_optionsdengan opsi yang memungkinkan berikut dan id mereka:

  • Airco (id = 123) dipilih
  • Radio (id = 124) dipilih
  • Bluetooth (id = 125)
  • Navigasi (id = 126)

Radio dan Airco dipilih untuk produk ini. Bagaimana saya bisa mendapatkan kedua nilai (radio, airco) dan menampilkannya? $ _produk diberikan.

SPRBRN
sumber

Jawaban:

19

Coba ini:

echo $_product->getResource()->getAttribute('car_options')->getFrontend()->getValue($_product);
Mayers
sumber
Saya tidak mendapatkan hasil! Ini bukan dropdown, tetapi atribut multiselect!
SPRBRN
Seharusnya masih berfungsi dengan multiselect, saya baru mencobanya sendiri. Coba var_dump($_product->getData('car_options');dan periksa hasilnya. Seharusnya string yang dipisahkan koma, jika tidak maka saya hanya bisa membayangkan modul pihak ke-3 mengganggu.
Mayers
Masih belum ada output. Kami menggunakan beberapa modul, tetapi saya tidak tahu ada yang mengacaukan atribut.
SPRBRN
Jika $_product->getData('car_options')mengembalikan NULL, itu berarti itu tidak ditambahkan ke koleksi produk Anda. Kami perlu tahu lebih banyak tentang di mana Anda mencoba mengakses atribut ini
Mayers
Saya telah menemukan solusi - lihat jawaban saya.
SPRBRN
2
$ objectManager = \ Magento \ Framework \ App \ ObjectManager :: getInstance (); $ product = $ objectManager-> get ('Magento \ Catalog \ Model \ Product') -> load ($ product_id);

$ atributvalues ​​= $ product-> getResource () -> getAttributeRawValue ($ product_id, 'my_custom_attribute_code', $ storeid);

berfungsi .. Semoga ini membantu Anda ..

Sameer Bhayani
sumber
Luar biasa ... Ini berfungsi seperti pesona !!!!!
Sneha Panchal
senang mengetahui :) @SnehaPanchal
Sameer Bhayani
0

Kode berikut

  1. mengembalikan id nilai dari opsi yang dipilih untuk produk ini: 123.124
  2. mengubahnya menjadi sebuah array: array (123.124)
  3. kemudian temukan label opsi-opsi itu: 123 => Airco dan 124 => Radio
  4. dan mengembalikan nilai dalam string teks: Airco, Radio
$ _attribute_code = 'car_options';
$ car_options_csv = Mage :: getResourceModel ('catalog / product') -> getAttributeRawValue ($ productId, $ _attribute_code, $ storeId); // pengembalian: 123.124
$ car_options = meledak (',', $ car_options_csv);
$ attributeId = Mage :: getResourceModel ('eav / entity_attribute') -> getIdByCode ('catalog_product', $ _ attribute_code);
$ attribute = Mage :: getModel ('catalog / resource_eav_attribute') -> load ($ attributeId);
$ atributOptions = $ atribut -> getSource () -> getAllOptions ();

$ res = '';
foreach ($ atributOptions sebagai $ a)
{
    $ l = $ a ['label'];
    $ m = $ a ['value'];
    if (strlen (trim ($ l))> 0 && in_array ($ m, $ car_options))
    {
        $ res. = trim ($ l). ',';
    }
}
gema substr ($ res, 0, -2) ;;
SPRBRN
sumber
Aduh - Anda biasanya tidak ingin pergi ke jalan itu. Terutama karena jawaban Mayer di atas berfungsi dengan baik. Saya juga tidak yakin jika Anda tidak melewati sistem terjemahan Magento dengan cara ini - belum memeriksa.
alur kerja
0

Terima kasih @ Mayer, solusinya terlalu bagus untuk tidak menimpa getAttributeText asli:

 public function getAttributeText($attributeCode)  
 {
    return $this->getResource()
        ->getAttribute($attributeCode)
        ->getFrontend()
        ->getValue($this);
 }

dan untuk menambah model pelanggan juga.

kiat
sumber