Pregunta

Estoy extendiendo la base de datos CATAG_PRODUCT_OPTION_TYPE_VALUE. Creé mi propia tabla, my_catalog_product_option_type_value y tiene una referencia a la opción_type_id. Tengo eso funcionando y mi clase funcionando, pero agregué una columna de tabla a la cuadrícula de opciones personalizadas y no puedo entender cómo obtener mi valor de campo personalizado.

enter image description here

Cuando hago clic en el botón 'Guardar y continuar' ', quiero poder obtener la ID de la opción_type_id recién creada o existente y luego usar esa ID y' mi valor 'para insertar o actualizar un registro en mi tabla my_catalog_product_option_type_value. Creé un observador que recoge el evento catalog_product_prepare_save. Eso está funcionando, pero solo devuelve un producto y sus opciones. No puedo obtener mi valor. Encontré este código en la clase ProductController:

if (isset($productData['options']) && !$product->getOptionsReadonly()) {
        $product->setProductOptions($productData['options']);
    }

Entonces, pensé que podría hacer algo como

$productData['options']['my_value']

Pero eso no funciona porque los datos de la publicación son [opciones] [id] [valores] [id] [my_value]. No sé cómo obtendría la identificación de estas opciones. Entonces, estoy un poco atascado y espero que alguien pueda señalarme en la dirección correcta

¿Fue útil?

Solución

Parece que tendrá que hacer algunas itteraciones de matriz y verificación clave para extraer sus valores.

Prueba esto en tu observador.

$options = $observer->getEvent()->getProduct()->getOptions();
if (is_array($options)) {
  foreach ($options as $key => $option) {
      if (is_array($option)  && array_key_exists('values',$option)) {   
          foreach ($option['values'] as $value) {
              if (is_array($value) && array_key_exists('YOUR FIELD NAME',$value)) {
                   $result = $value['YOUR FIELD NAME'];
                   // do something with the $result
              } 
          }
      }
  } 

}

Espero que ayude.

Otros consejos

En el catalog_product_prepare_save Observer, debe usar el código

$ options = $ observver-> getEvent ()-> getProduct ()-> getProductOptions ();

en vez de

$ options = $ observver-> getEvent ()-> getProduct ()-> getOptions ();

y consulte la parte restante en la respuesta de Proxiblue!

Lo probé en el trabajo con la versión Magento 1.8.1.0.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top