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.

Jawaban:


19

Coba ini:

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

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 ..


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) ;;

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.