Obtener el valor del atributo de selección múltiple seleccionado

14

Tome el siguiente producto de "automóvil": Volkswagen Golf .

Tiene un atributo de selección múltiple car_optionscon las siguientes opciones posibles y sus identificadores:

  • Airco (id = 123) seleccionado
  • Radio (id = 124) seleccionada
  • Bluetooth (id = 125)
  • Navegación (id = 126)

Radio y Airco son seleccionados para este producto. ¿Cómo puedo obtener esos dos valores (radio, airco) y mostrarlos? $ _producto es dado.

SPRBRN
fuente

Respuestas:

19

Prueba esto:

echo $_product->getResource()->getAttribute('car_options')->getFrontend()->getValue($_product);
Mayers
fuente
¡No obtengo salida! ¡Esto no es un menú desplegable, sino un atributo de selección múltiple!
SPRBRN
Todavía debería funcionar con una selección múltiple, solo lo intenté yo mismo. Intenta var_dump($_product->getData('car_options');y verifica la salida. Debería ser una cadena separada por comas, si no es así, solo puedo imaginar que un módulo de terceros está interfiriendo.
Mayers
Todavía no hay salida. Usamos varios módulos, pero no conozco ninguno que interfiera con los atributos.
SPRBRN
Si $_product->getData('car_options')devuelve NULL, significa que no se agrega a su colección de productos. Necesitaremos saber más sobre dónde está intentando acceder a este atributo
Mayers
He encontrado una solución, mira mi respuesta.
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);

funciona ... Espero que te ayude ...

Sameer Bhayani
fuente
Impresionante ... ¡Funciona como un encanto!
Sneha Panchal
contento de saber :) @SnehaPanchal
Sameer Bhayani
0

El siguiente código

  1. devuelve los identificadores de valor de las opciones seleccionadas para este producto: 123,124
  2. convierte eso en una matriz: matriz (123,124)
  3. luego encuentra la etiqueta de esas opciones: 123 => Airco y 124 => Radio
  4. y devuelve los valores en una cadena de texto: Airco, Radio
$ _attribute_code = 'car_options';
$ car_options_csv = Mage :: getResourceModel ('catalog / product') -> getAttributeRawValue ($ productId, $ _attribute_code, $ storeId); // devuelve: 123,124
$ car_options = explotar (',', $ 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 ['etiqueta'];
    $ m = $ a ['valor'];
    if (strlen (trim ($ l))> 0 && en_array ($ m, $ car_options))
    {
        $ res. = recortar ($ l). ',';
    }
}
echo substr ($ res, 0, -2) ;;
SPRBRN
fuente
Ouch, generalmente no quieres ir por ese camino. Especialmente porque la respuesta de Mayer anterior funciona bien. Tampoco estoy seguro de si no está pasando por alto el sistema de traducción de Magento de esta manera, aunque no lo he comprobado.
flujo de trabajo del
0

Gracias @Mayers, su solución es demasiado buena para no anular el getAttributeText nativo:

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

y para agregar al modelo del cliente también.

kiatng
fuente