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.