ruthcast Posted November 20, 2019 Share Posted November 20, 2019 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: public聽function聽hookHeader(){ 聽聽 聽 聽$link聽=聽new聽Link; 聽聽聽聽聽聽聽聽$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'; class聽TablallantasAjaxModuleFrontController聽extends聽ModuleFrontController { 聽聽聽聽public聽function聽initContent() 聽聽聽聽{聽聽聽$module聽=聽new聽TablaLlantas; 聽聽聽聽聽聽聽聽$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 More sharing options...
ruthcast Posted November 21, 2019 Author Share Posted November 21, 2019 @gusman126聽tendr谩s alguna idea al respecto?馃槴 Link to comment Share on other sites More sharing options...
gusman126 Posted November 21, 2019 Share Posted November 21, 2019 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 More sharing options...
jgamio Posted November 29, 2019 Share Posted November 29, 2019 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 }, }); 聽 1 Link to comment Share on other sites More sharing options...
ruthcast Posted November 30, 2019 Author Share Posted November 30, 2019 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 More sharing options...
Prestafan33 Posted December 1, 2019 Share Posted December 1, 2019 (edited) 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 December 1, 2019 by Prestafan33 (see edit history) Link to comment Share on other sites More sharing options...
ruthcast Posted December 1, 2019 Author Share Posted December 1, 2019 Gracias @Prestafan33.. Saludos. 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