Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

480
Views
Llame a un módulo de prestashop con ajax

Tengo un módulo de PrestaShop llamado 'MyMenu' y quiero llamar a este menú con una llamada AJAX. Mi módulo se muestra en el método hookFooter() :

 public function hookFooter() { $display = $this->display(__FILE__, 'megamenu.tpl', $smartyCacheId); Tools::restoreCacheSettings(); return $display; }

Quiero mostrar con este script:

 <div class="load_menu"></div> <script> $(document).ready(function (e) { $.ajax({ method: "POST", url: "../modules/MyMenu.php", data: {}, success: function (data) { $('.load_menu').html(data); } }) }); </script>
about 4 years ago · Santiago Trujillo
3 answers
Answer question

0

La mejor manera es hacerlo a través de un controlador frontal conectado a su módulo. Puedes llamar a la url así:

 $link->getModuleLink('modulename','controller', $parameters); // Parameters is an optionnal array, it can be empty

Y para el controlador, coloque un archivo como este ./modules/modulename/controllers/front/ajax.php con este tipo de contenido:

 class ModuleNameAjaxModuleFrontController extends ModuleFrontController { public function initContent() { $response = array('status' => false); require_once _PS_MODULE_DIR_.'modulename/modulename.php'; $module = new ModuleName; if (Tools::isSubmit('action')) { $context = Context::getContext(); $cart = $context->cart; switch (Tools::getValue('action')) { case 'actionname': $response = array('status' => true); break; default: break; } } // Classic json response $json = Tools::jsonEncode($response); $this->ajaxDie($json); // For displaying like any other use this method to assign and display your template placed in modules/modulename/views/template/front/... // $this->context->smarty->assign(array('var1'=>'value1')); // $this->setTemplate('template.tpl'); // For sending a template in ajax use this method // $this->context->smarty->fetch('template.tpl'); } }
about 4 years ago · Santiago Trujillo Report

0

Si no desea pasar la URL por el módulo, el fragmento js debería ser así.

 $(document).ready(function(){ $.ajax({ type: "POST", headers: { "cache-control": "no-cache" }, url : baseDir + 'modules/yourmodulename/yourfile.php', data: { token : token }, success : function(data){ $('.load-menu').html(data) } }); });

Donde yourmodulename es el nombre de su módulo y yourfile.php es el código donde recupera el menú.

No olvide agregar a sus datos el token, es para evitar un ataque CSFR, obviamente también debe verificar el token en el script del lado del servidor.

about 4 years ago · Santiago Trujillo Report

0

En un nuevo archivo en la raíz del módulo, puede crear un archivo "ajax.php"

 require_once(MODULE_DIR.'MyMenu/mymenu.php'); if(Tools::getValue('token') != $mymenu = Module::getInstanceByName('mymenu'); $menu = $mymenu->hookFooter(); die($menu);

En tu js, en la raíz de tu módulo.

 <script> $(document).ready(function (e) { $.ajax({ method: "POST", url: "./ajax.php", data: {}, success: function (data) { $('.load_menu').html(data); } }) }); </script>
about 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!