Carlostlr Posted May 6, 2019 Share Posted May 6, 2019 Buenas, estoy creando un modulo con el que añado un formulario en la ventana modal de cuando añades un producto al carrito. He creado un hook para anclarlo en este modal. El problema que tengo es con el formulario, lo estoy mandando por ajax pero no consigo recoger los datos desde mi archivo php del modulo, he probado a mandar el formulario a un archivo nuevo php y veo que manda los datos por POST sin problema alguno, pero en mi archivo controlador del modulo no hay forma de hacerlo, mi código es el siguiente : mimodulo.php public function hookanclaNuevo($params) { if (Tools::isSubmit('submitPrueba')) { // si funciona redirigirá a google de prueba header('location:www.google.es'); } //cargamos el archivo tpl return $this->display(__FILE__, 'views/templates/hook/mimodulo.tpl'); } mimodulo.tpl <script> $(document).ready(function() { $("#formulario").submit(function(e) { e.preventDefault(); $.ajax( { type: 'POST', url: '', data: $('#formulario').serialize(), success: function(response) { alert("Ha funcionado"); }, error: function() { alert("Algo ha fallado"); } }); }); }); </script> <form method="post" id="formulario"> <input type="hidden" name="valor" value="valor a pasar"> <input name="submitPrueba" type="submit" value="enviar"/> </form> modules/ps_shoppingcart/modal.tpl <div class="cart-content"> <p><strong>{l s='Total:' d='Shop.Theme.Checkout'}</strong> {$cart.totals.total.value} {$cart.labels.tax_short}</p> <div class="cart-content-btn ttvproduct-cart-btn"> <button type="button" class="btn btn-secondary" data-dismiss="modal">{l s='Continue shopping' d='Shop.Theme.Actions'}</button> <a href="{$cart_url}" class="btn btn-primary"><i class="ion-android-done"></i>{l s='Tramitar Pedido' d='Shop.Theme.Actions'}</a> </div> <--! Anclo mimodulo a este lugar --> {hook h='anclaNuevo'} </div> Necesito ayuda, no comprendo como lo hace prestashop para cuando es pulsado el botón vuelva a ejecutar el código y procese los datos del post. Link to comment Share on other sites More sharing options...
Rolige Posted May 6, 2019 Share Posted May 6, 2019 Hola: Necesitas especificar la URL a la que enviaras los datos del formulario en la petición por ajax. Actualmente, según tu código, la URL está vacía. Puedes enviar la petición directamente a un archivo ajax.php en tu modulo o a un controlador de front también de tu modulo. Busca referencias similares en ambos casos en otros módulos que ya lo tienen, por ejemplo el del carrito de compras. De antemano te digo que el procesamiento en tu hook no se ejecutará, a menos que se ejecute la misma petición donde renderizas el TPL, o sea, la de la ventana modal luego de agregar producto al carrito. Las 2 opciones que te di anteriormente son las correctas desde el punto de vista del PS, la primera mucho mas simple de implementar que la segunda. Saludos 1 Link to comment Share on other sites More sharing options...
Carlostlr Posted May 6, 2019 Author Share Posted May 6, 2019 Hola @Rolige gracias por tu ayuda, he estado mirando el módulo del ps_shoppingcart como me has comentado, he creado un archivo ajax.php en mi modulo y en mi formulario mando los datos post al archivo modules/mimodulo/controllers/front/ajax.php, si hago por ejemplo un echo(var_dump($_POST)); al principio de a la clase recoge los datos perfectamente, pero no consigo que lo coja dentro de la clase en el método class mimoduloAjax extends ModuleFrontController { public function initContent() { parent::initContent(); if (Tools::isSubmit('submitPrueba') == true) { $hola = 'Funciona!!'; $archivo="datos.txt"; $file=fopen($archivo,"a"); fwrite($file,$hola); fclose($file); } } } Soy nuevo en esto y es mi primer módulo y estoy un poco perdido con el tema de los formularios, por favor, he mirado en el módulo del carrito pero no encuentro nada que apunte a este archivo ajax.php, gracias de nuevo. Link to comment Share on other sites More sharing options...
Carlostlr Posted May 6, 2019 Author Share Posted May 6, 2019 Ya he conseguido solucionarlo, no se si será la mejor forma de hacerlo, pero mi código quedaría así: mimodulo.tpl <script> $(document).ready(function() { $("#formulario").submit(function(e) { e.preventDefault(); var url = "{$link->getModuleLink('Productwarranty', 'ajax', array())}"; $.ajax( { type: 'POST', url: , data: $('#formulario').serialize(), success: function(response) { alert("Ha funcionado"); }, error: function() { alert("Algo ha fallado"); } }); }); }); </script> <form method="post" id="formulario"> <input type="hidden" name="valor" value="valor a pasar"> <input name="submitPrueba" type="submit" value="enviar"/> </form> ajax.php class MymoduloAjaxModuleFrontController extends ModuleFrontController { public function initContent() { $this->ajax = true; echo(var_dump($_POST)); parent::initContent(); } } Con esto al hacer el echo me devuelve los datos que necesitaba por POST. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now