Obter valor do atributo de seleção múltipla selecionado

14

Pegue o seguinte produto "carro": Volkswagen Golf .

Possui um atributo de seleção múltipla car_optionscom as seguintes opções possíveis e seus IDs:

  • Airco (id = 123) selecionado
  • Rádio (id = 124) selecionado
  • Bluetooth (id = 125)
  • Navegação (id = 126)

Rádio e Airco foram selecionados para este produto. Como posso obter esses dois valores (rádio, airco) e exibi-los? $ _product é fornecido.

SPRBRN
fonte

Respostas:

19

Tente o seguinte:

echo $_product->getResource()->getAttribute('car_options')->getFrontend()->getValue($_product);
Mayers
fonte
Não recebo saída! Este não é um menu suspenso, mas um atributo de seleção múltipla!
SPRBRN 27/06
Ainda deve funcionar com uma seleção múltipla, eu mesmo tentei. Tente var_dump($_product->getData('car_options');e verifique a saída. Deve ser uma string separada por vírgula; se não for, só posso imaginar que um módulo de terceiros esteja interferindo.
Mayers
Ainda sem saída. Usamos vários módulos, mas não conheço nenhum que mexa com os atributos.
SPRBRN
Se $_product->getData('car_options')retornar NULL, significa que não foi adicionado à sua coleção de produtos. Precisamos saber mais sobre onde você está tentando acessar esse atributo
Mayers
Encontrei uma solução - veja minha resposta.
SPRBRN 27/06
2
$ objectManager = \ Magento \ Framework \ App \ ObjectManager :: getInstance (); $ product = $ objectManager-> get ('Magento \ Catálogo \ Modelo \ Produto') -> load ($ product_id);

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

funciona .. Espero que ajude você ..

Sameer Bhayani
fonte
Incrível ... Funciona como um encanto !!!!!
Sneha Panchal
prazer em saber :) @SnehaPanchal
Sameer Bhayani
0

O código a seguir

  1. retorna os IDs de valor das opções selecionadas para este produto: 123,124
  2. transforma isso em uma matriz: array (123,124)
  3. depois encontra o rótulo dessas opções: 123 => Airco e 124 => Radio
  4. e retorna os valores em uma sequência de texto: Airco, Radio
$ _attribute_code = 'car_options';
$ car_options_csv = Mage :: getResourceModel ('catalog / product') -> getAttributeRawValue ($ productId, $ _attribute_code, $ storeId); // retorna: 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 como $ a)
{
    $ l = $ a ['label'];
    $ m = $ a ['valor'];
    if (strlen (trim ($ l))> 0 && in_array ($ m, $ car_options))
    {
        $ res. = trim ($ l). ',';
    }
}
eco substr ($ res, 0, -2) ;;
SPRBRN
fonte
Ai - você geralmente não quer ir por esse caminho. Especialmente porque a resposta de Mayer acima funciona bem. Também não tenho certeza se você não está ignorando o sistema de tradução do Magento dessa maneira - ainda não foi verificado.
workflow
0

Obrigado @Mayers, sua solução é boa demais para não substituir o getAttributeText nativo:

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

e adicionar ao modelo do cliente também.

kiatng
fonte