Obtenir la valeur de l'attribut multisélection sélectionné

14

Prenez le produit "voiture" suivant: Volkswagen Golf .

Il a un attribut multiselect car_optionsavec les options possibles suivantes et leurs ids:

  • Airco (id = 123) sélectionné
  • Radio (id = 124) sélectionnée
  • Bluetooth (id = 125)
  • Navigation (id = 126)

Radio et Airco sont sélectionnés pour ce produit. Comment puis-je obtenir ces deux valeurs (radio, airco) et les afficher? $ _product est donné.

SPRBRN
la source

Réponses:

19

Essaye ça:

echo $_product->getResource()->getAttribute('car_options')->getFrontend()->getValue($_product);
Mayers
la source
Je n'obtiens aucune sortie! Ce n'est pas une liste déroulante, mais un attribut multisélection!
SPRBRN
Cela devrait toujours fonctionner avec une multisélection, je viens de l'essayer moi-même. Essayez de var_dump($_product->getData('car_options');vérifier la sortie. Ce devrait être une chaîne séparée par des virgules, si ce n'est pas le cas, je peux seulement imaginer qu'un module tiers interfère.
Mayers
Toujours pas de sortie. Nous utilisons plusieurs modules, mais je n'en connais aucun qui dérange les attributs.
SPRBRN
Si $_product->getData('car_options')renvoie NULL, cela signifie qu'il n'est pas ajouté à votre collection de produits. Nous aurons besoin d'en savoir plus sur l'endroit où vous essayez d'accéder à cet attribut
Mayers
J'ai trouvé une solution - voir ma réponse.
SPRBRN
2
$ objectManager = \ Magento \ Framework \ App \ ObjectManager :: getInstance (); $ product = $ objectManager-> get ('Magento \ Catalog \ Model \ Product') -> load ($ product_id);

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

cela fonctionne .. J'espère que cela vous aidera ..

Sameer Bhayani
la source
Génial ... Cela fonctionne comme un charme !!!!!
Sneha Panchal
heureux de savoir :) @SnehaPanchal
Sameer Bhayani
0

Le code suivant

  1. renvoie les ID de valeur des options sélectionnées pour ce produit: 123,124
  2. transforme cela en tableau: tableau (123,124)
  3. trouve ensuite le libellé de ces options: 123 => Airco et 124 => Radio
  4. et renvoie les valeurs dans une chaîne de texte: Airco, Radio
$ _attribute_code = 'options_car';
$ car_options_csv = Mage :: getResourceModel ('catalogue / produit') -> getAttributeRawValue ($ productId, $ _attribute_code, $ storeId); // renvoie: 123,124
$ car_options = explode (',', $ car_options_csv);
$ attributeId = Mage :: getResourceModel ('eav / entity_attribute') -> getIdByCode ('catalog_product', $ _ attribute_code);
$ attribute = Mage :: getModel ('catalog / resource_eav_attribute') -> load ($ attributeId);
$ attributeOptions = $ attribute -> getSource () -> getAllOptions ();

$ res = '';
foreach ($ attributeOptions comme $ a)
{
    $ l = $ a ['étiquette'];
    $ m = $ a ['valeur'];
    if (strlen (trim ($ l))> 0 && in_array ($ m, $ car_options))
    {
        $ res. = trim ($ l). ',';
    }
}
echo substr ($ res, 0, -2) ;;
SPRBRN
la source
Aïe - vous ne voulez généralement pas emprunter cette voie. D'autant plus que la réponse de Mayer ci-dessus fonctionne très bien. Je ne sais pas non plus si vous ne contournez pas le système de traduction de Magento de cette façon - je n'ai pas vérifié cependant.
workflow du
0

Merci @Mayers, sa solution est trop bonne pour ne pas remplacer le getAttributeText natif:

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

et d'ajouter au modèle client également.

kiatng
la source