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

Réponses:


19

Essaye ça:

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

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


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

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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.