Buenos días, estoy intentando crear un addon donde el cliente si quiere que un producto reciba un complemento adicional, se le agregue el 3.5% del precio total a ese mismo producto, pero en magento no se como podria hacer eso, tenia pensado que ese valor agregado este en el producto dentro del carrito, pero no se muy bien como funciona el carrito.
espero alguna sugerencia o algo para ayudarme a resolver el problema que tengo.
Gracias de antemano
haaaaa me parece perfecto, solo que quisiera que todos los productos tuvieran eso por default, como podria hacerlo??? con una extencion para que siempre aparesca?? o hay alguna obcion para que se agregue a todos los productos???
Hola @Korinho,
Las Custom options están siempre disponible. ¿Cuando dices que estén siempre te refieres a la misma opción en todos los productos?.
¿La misma opción con los mismos valores?
si exactamente eso, todos los productos que se den de alta tendran esa Custom options que yo les ponga, estuve pensando que si se los agrega cada vez que se da de alta un producto, pero como puedo detectar que se agrego un producto??? y como puedo obtener el id de ese producto agregado recientemente?
Hola @Korinho,
No lo he probado en Magento2 aún (para este evento específico) pero creo que mi prime prueba sería usar un observer que escuche un after_save del producto. Allí, vía código, agregar la custom option.
De esta forma, cada vez que se grabe se validaría y se agregaría en caso de no existir.
me parece perfecto, solo que en el codigo del observer de tu pagina
https://www.damianculotta.com.ar/magento/usando-observers-en-magento2/
donde dice:
$product = $observer->getProduct(); $originalName = $product->getName(); $modifiedName = $originalName . ' - MODIFICADO POR EL OBSERVER';
en mi caso seria:
$product = $observer->getProduct(); $originalName = $product->getIdproduct();
????
Hola @Korinho,
El ejemplo de ese post es bastante básico (y para el frontend).
En tu caso debería ser para el adminhtml, cuando se graba el producto (si mal no recuerdo el thread).
El pincpio es el mismo. Deberías tener el código para crear una custom option y asociarla a un producto.
Luego, con el observer, ejecutarías ese código (el de creación de la custom option). De esta forma, al crear el producto se crearía automáticamente.
Claramente deberías agregar algunos controles para evitar que se vuelva a crear si ya existe.
Probaria primero con crear una custom option programáticamente. Luego volvería al observer.
el codigo de magento no lo conozco bien asi que tengo pensado agregar directamente a la base de datos los registros que necesita para crear la opcion, ya tengo identificadas todas las tablas, lo que no entiendo es como hace magento para detectar que se esta agregando un producto para ejecutar mi evento?
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="catalog_controller_product_view"> <observer name="BarbanetProductData" instance="Barbanet\SampleModule\Observer\Product\Data" /> </event> <event name="barbanet_samplemodule_controller_event_after"> <observer name="BarbanetControllerSample" instance="Barbanet\SampleModule\Observer\Controller\Sample" /> </event> </config>
ahí pues yo puedo ponerle el nombre a mi evento pero como le dice a magento que va a observar cuando se agregue un producto??? estoy intentando acoplarlo a mi código por eso pregunto.
gracias
hola, ya resolvi la mayoria de los problemas, solo me queda que quiero el id del producto recien agregado, pero no me lo arroja, lo tengo asi
$product = $observer->getEvent()->getProduct(); $Id = $product->getId();
ya e probado con varias y no me devuelve el id del producto recién agregado.
hice una prueba con otro observer que al agregar un producto del carrito me de el id y si me lo da, pero en _save_after no me lo arroja.