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.

Respuestas:


19

Prueba esto:

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

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


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

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.