Jump to content

Enrutamiento de llamadas Ajax Prestashop1.7


ruthcast

Recommended Posts

Hola a todos de nuevo, he desarrollado un m贸dulo que muestra una tabla de productos en una plantilla.tpl desde un hook, estoy intentando crearle filtros personalizados, debido a que no logre ajustar los de b煤squeda por facetas que trae prestashop 1.7 al dise帽o en modo de tabla que realic茅,聽 para ello he intentado hacer una llamada ajax desde la plantilla a un controlador frontal en mi modulo que ejecutar谩 una consulta a la bd聽y me devolver谩 un resultado para mostrar en la plantilla, pero hasta el momento no he logado聽obtener una respuesta 200 del servidor.

Para ello he hecho lo siguiente.

En el archivo principal.php del m贸dulo he creado la url de la siguiente forma:

publicfunction聽hookHeader(){
聽聽 聽 聽$link聽=newLink;
聽聽聽聽聽聽聽聽$ajax_link聽=聽$link->getModuleLink('tablaLlantas','TablallantasAjax');
聽聽聽聽聽聽聽聽Media::addJsDef(array(
聽聽聽聽聽聽聽聽聽聽聽聽"ajax_link"=>聽$ajax_link
聽聽聽聽聽聽聽聽));
}

He creado un controlador para el ajax.php en la ruta modules/nameModule/controller/front/ajax.php:

Que solo para probar lleva el siguiente c贸digo:

require_once(dirname(__FILE__).'../../../../config/config.inc.php');
require_once(dirname(__FILE__).'../../../../init.php');
require_once聽_PS_MODULE_DIR_.'tablaLlantas/tablaLlantas.php';

classTablallantasAjaxModuleFrontControllerextendsModuleFrontController
{
聽聽聽聽publicfunction聽initContent()

聽聽聽聽{聽聽聽$module聽=newTablaLlantas;
聽聽聽聽聽聽聽聽$this->ajax聽=true;
聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽parent::initContent();
聽聽聽聽聽聽聽聽if(Tools::isSubmit('action')){
聽聽聽 聽 聽 聽 聽 $context聽=Context::getContext();

聽聽聽聽聽聽聽聽聽聽聽聽//聽Default聽response聽with聽translation聽from聽the聽module

聽聽聽聽聽聽聽聽聽聽聽聽$response聽=聽array('status'=>false,"message"=>聽$module->l('Nothing聽here.'));

聽聽聽聽聽聽聽聽聽聽聽聽switch(Tools::getValue('action')){
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽case'action_name':
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽$response聽=聽array('status'=>true,"message"=>聽$module->l('It聽works聽!'));
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽break;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽default:
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽break;
聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽聽//聽Classic聽json聽response
聽聽聽聽聽聽聽聽聽$json聽=Tools::jsonEncode($response);
聽聽聽聽聽聽聽聽聽echo聽$json;
聽聽聽聽聽聽聽聽聽die;
聽聽聽聽}
}

y en la platilla tpl ubicada en la ruta modules/tablaLlantas/views/templates/hook la cual esta asociada el hook que estoy mostrando he usado el siguiente c贸digo:

 function llamadaAjax(){
            $("#marcaSelect option:selected").each(function() {
                $.getJSON(ajax_link, {parameter1 : "value"}, function(data) {
                    if(typeof data.status !== "undefined") {
                        // Use your new datas here
                    console.log(data);
                    }
                });
            });
        };

tambi茅n he intentado crear un archivo ajax.php en la ra铆z del directorio y nada. Siempre me da una respuesta 404. No logro entender la estructura de prestashop1.7 para enrutar correctamente la llamada Ajax. Si alguien puede ayudarme se lo agradecer铆a mucho. Estoy con la versi贸n prestashop 1.7

Link to comment
Share on other sites

hace 4 horas, ruthcast dijo:

@gusman126聽tendr谩s alguna idea al respecto?馃槴

Las llamadas AJAX no tengo experiencia en llamadas a controladores, siempre uso JavaScript y llamadas a ficheros independientes PHP.

No te puedo decir c贸mo hacer la llamada a una orden AJAX de un controlador o un m贸dulo.

En la documentaci贸n de PrestaShop s铆 que hay algo de informaci贸n

Link to comment
Share on other sites

Hola a ver lo que te puedo decir a primera vista

1 - Lo primero es que la ruta del controller es聽聽con s controllers

2 - Luego todos esos archivos que llamas en el controller no los necesitas

puedes probar el controller levanta con algo tan simple que consultandolo en tu browser (claro si pruebas un get )

tutienda.com/index.php?fc=module&module=TUMODULO&controller=ajax

y si quieres desde seo lo buscas y le creas聽un friendly asi te aseguras que prestashop te lee el controller

3 Ahora la llamada historicamente la hago asi sin problema asi

        $.ajax({
            type: 'POST',
            url: prestashop.urls.base_url  + 'index.php?fc=module&module=yourmodule&controller=ajax' ,
            headers: { "cache-control": "no-cache" },
            dataType: 'json',
            data: 	{
                        ajax: true,
						// Otros valores aqui
                    }  ,
            success: function(response) {
              // AQUI 
        },
        error: function(response) {

          // ERROR AQUI
            },
        });

  • Like 1
Link to comment
Share on other sites

Hola gracias por tu respuesta. Lo resolv铆 hace algunos d铆as con un archivo ajax.php en la ra铆z del directorio del modulo al cual llam茅 mediante ajax con esta ruta index.php/ajax.php y funcion贸. No se si seg煤n PS sea lo mas 贸ptimo pero funcion贸.聽

Link to comment
Share on other sites

Hay m贸dulos que lo hacen como comentas, con un archivo ajax.php directamente en el directorio ra铆z del m贸dulo o en alguno de sus subdirectorios, as铆 que dudo que esa soluci贸n d茅 ning煤n problema.

Aunque el m茅todo "oficial" ser铆a como聽 creo que lo estabas intentando al principio y como te ha聽 recomendado jgamio, declarar el controlador como tal dentro de la inicializaci贸n del m贸dulo y luego colocar ah铆 la gesti贸n de las peticiones AJAX.

Pero si ya te funciona como lo tienes, ni lo toques, que no merece la pena complicarse.

Edited by Prestafan33 (see edit history)
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...