En el backend de un sitio de PrestaShop estoy usando esta función:
public function hookAjax($action, $id_product, $id_lang, $title, $descript, $order, $id = NULL) { /* various code*/ $this->context->smarty->assign( array( 'block_define' => $this->getFormDesc($id_product) ) ); return $this->context->smarty->fetch($this->local_path.'views/templates/hook/admin_extra_desc.tpl'); } public function getFormDesc($id_product) { $array = array(); foreach (Language::getLanguages() as $lang) { /*various code*/ foreach($result as $k=> $r) { $files = array(); $helper = new HelperImageUploader(); $helper->setMultiple(false)->setUseAjax(true)->setName('thumbnail_'.$r['id'].'_'.$r['id_lang'])->setFiles($files)->setMaxFiles(3)->setUrl('../modules/module-name/imgAjaxCall.php?'); $result[$k]['img-form'] = $helper->render(); $result[$k]['img'] = $result[$k]['img'] ? _PS_BASE_URL_.__PS_BASE_URI__.'modules/module-name/upload/'.$result[$k]['img'] : ''; } $array[$lang["id_lang"]] = array( 'lang_data' => $lang, 'count' => count($result), 'data' => $result ); } return $array; }HookAjax es llamado por:
<?php include(dirname(__FILE__).'/../../config/config.inc.php'); $context = Context::getContext(); $addDesc = Module::getInstanceByName('module-name'); echo $addDesc->hookAjax($_POST['action'],$_POST['id_prodotto'],$_POST['lang'],$_POST['title'], $_POST['text_desc'], NULL, $_POST['row']); ?>Pero lucho con este error:
Error fatal: llamar a una función miembro addJs() en un no objeto en {my_site}/classes/helper/HelperUploader.php en la línea 257
Debe incluir init.php en HookAjax después de incluir config.inc.php para que el controlador se inicialice en contexto.
include(dirname(__FILE__).'/../../init.php');Tenga en cuenta que esto es solo una mala práctica, respete el MVC y use los controladores adecuados para sus llamadas AJAX y validación/procesamiento de datos en ellos, no dentro de la clase del módulo principal.