Jump to content

Formulario en modal carrito


Carlostlr

Recommended Posts

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

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

  • Like 1
Link to comment
Share on other sites

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

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...