Hola @monicaonline y @inmaes82,
Efectivamente, como bien apunta Inma, el die('0') es un problema clásico en controladores frontales que deberían responder con JSON. PrestaShop, por defecto, intentará renderizar toda la plantilla si no le indicas que la petición es AJAX.
La clave está en dos puntos:
- Indicar al controlador que es una petición AJAX con
$this->ajax = true; (esto se suele hacer en el constructor __construct() de tu ModuleFrontController o en postProcess()).
- Reemplazar el
die('0') por una respuesta JSON estructurada y un exit; para detener la ejecución de forma limpia.
Aquí tienes cómo podrías modificar ese fragmento en cfrompro/controllers/front/question.php para que maneje el error correctamente:
if (!Module::isEnabled('cfrompro') || Tools::getValue('action') != 'sendQuestion' || Tools::getValue('secure_key') != $this->module->secure_key) {
header('Content-Type: application/json');
echo json_encode(['success' => false, 'message' => 'Acceso denegado: módulo inactivo o clave inválida.']);
exit;
}
$customerMail = trim((string) Tools::getValue('email'));
Con esto, tu JavaScript recibirá un JSON con success: false y un mensaje, que podrás gestionar adecuadamente en el cliente. Recuerda añadir $this->ajax = true; en el constructor del controlador o en postProcess() si no lo tienes ya para asegurar que no se renderice HTML no deseado. Si necesitas una gestión más robusta de formularios y respuestas AJAX en tu tienda, te recomiendo buscar una solución para creador avanzado de formularios que ofrezca estas funcionalidades de forma nativa y bien integrada.