Ottieni il valore dell'attributo multiselect selezionato


14

Prendi il seguente prodotto "auto": Volkswagen Golf .

Ha un attributo a selezione multipla car_optionscon le seguenti opzioni possibili e i loro ID:

  • Airco (id = 123) selezionato
  • Radio (id = 124) selezionata
  • Bluetooth (id = 125)
  • Navigazione (id = 126)

Radio e Airco sono selezionati per questo prodotto. Come posso ottenere quei due valori (radio, airco) e visualizzarli? $ _product è dato.

Risposte:


19

Prova questo:

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

Non ricevo output! Questo non è un menu a discesa, ma un attributo a selezione multipla!
SPRBRN,

Dovrebbe funzionare ancora con una selezione multipla, l'ho provato da solo. Prova var_dump($_product->getData('car_options');e controlla l'output. Dovrebbe essere una stringa separata da virgola, se non lo è, posso solo immaginare che un modulo di terze parti stia interferendo.
Mayers,

Ancora nessun output. Usiamo diversi moduli, ma non conosco nessuno che abbia problemi con gli attributi.
SPRBRN,

Se $_product->getData('car_options')restituisce NULL, significa che non è stato aggiunto alla tua raccolta di prodotti. Dovremo sapere di più su dove stai tentando di accedere a questo attributo
Mayers,

Ho trovato una soluzione - vedi la mia risposta.
SPRBRN,

2
$ objectManager = \ Magento \ Framework \ App \ ObjectManager :: getInstance (); $ product = $ objectManager-> get ('Magento \ Catalog \ Model \ Product') -> load ($ product_id);

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

funziona .. spero che ti aiuti ..


Fantastico ... Funziona come un fascino !!!!!
Sneha Panchal,

felice di sapere :) @SnehaPanchal
Sameer Bhayani,

0

Il seguente codice

  1. restituisce gli ID valore delle opzioni selezionate per questo prodotto: 123.124
  2. lo trasforma in un array: array (123.124)
  3. quindi trova l'etichetta di queste opzioni: 123 => Airco e 124 => Radio
  4. e restituisce i valori in una stringa di testo: Airco, Radio
$ _attribute_code = 'car_options';
$ car_options_csv = Mage :: getResourceModel ('catalogue / product') -> getAttributeRawValue ($ productId, $ _attribute_code, $ storeId); // ritorna: 123.124
$ car_options = explode (',', $ car_options_csv);
$ attributiId = Mage :: getResourceModel ('eav / entity_attribute') -> getIdByCode ('catalog_product', $ _ attributo_codice);
$ attributo = Mage :: getModel ('catalog / resource_eav_attribute') -> load ($ AttribId);
$ attributoOpzioni = $ attributo -> getSource () -> getAllOptions ();

$ res = '';
foreach ($ attributiOptions come $ a)
{
    $ l = $ a ['etichetta'];
    $ m = $ a ['valore'];
    if (strlen (trim ($ l))> 0 && in_array ($ m, $ car_options))
    {
        $ res. = trim ($ l). ',';
    }
}
substr di eco ($ res, 0, -2) ;;

Ahi - di solito non vuoi percorrere quella strada. Soprattutto dal momento che la risposta di Mayer sopra funziona bene. Inoltre, non sono sicuro se non stai bypassando il sistema di traduzione di Magento in questo modo, ma non ho controllato.
flusso di lavoro

0

Grazie @Mayers, la sua soluzione è troppo buona per non sovrascrivere il getAttributeText nativo:

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

e da aggiungere anche al modello del cliente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.