Ayuda a agregar un campo de valor de tipo de opción personalizada
-
16-10-2019 - |
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.
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
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.