Hola @raul_bcn,
Los compañeros @lorenaauto64 y @diego_admin están en lo cierto. Tu intento en el ProductController es una solución que, aunque ingeniosa, no es la más adecuada para PrestaShop 8.x. El postProcess de un controlador existente no está diseñado para manejar formularios de módulos personalizados. Esto genera los problemas que describes: conflictos, dificultades de actualización y carencias de seguridad.
Para implementar esto de forma limpia, la solución correcta es crear un módulo con un ModuleFrontController propio. Este controlador se encargará de: 1) renderizar el formulario (con su propia plantilla), 2) manejar el postProcess del envío del formulario, y 3) realizar la validación y el envío seguro del email. Luego, usarías un hook como displayProductButtons para añadir tu botón o enlace en la ficha de producto, que apuntaría a la URL de tu ModuleFrontController.
Aquí te dejo un esquema muy simplificado de cómo sería el postProcess en un ModuleFrontController de un módulo llamado mymodule:
// controllers/front/AskProductController.php de un módulo llamado 'mymodule'
class MyModuleAskProductControllerModuleFrontController extends ModuleFrontController
{
public function postProcess()
{
parent::postProcess();
if (Tools::isSubmit('submitAskProduct')) {
$idProduct = (int)Tools::getValue('id_product');
$customerEmail = Tools::getValue('customer_email');
$question = Tools::getValue('question');
// Aquí iría tu lógica de validación (email válido, no vacío, etc.)
// También podrías añadir un CAPTCHA para evitar spam.
if (empty($customerEmail) || !Validate::isEmail($customerEmail) || empty($question)) {
$this->errors[] = $this->trans('Por favor, rellena todos los campos correctamente.', [], 'Modules.Mymodule.Shop');
} else {
// Lógica de envío de email aquí, usando una plantilla específica del módulo
// Mail::Send( ... )
$this->context->controller->redirectWithNotifications(
$this->context->link->getProductLink($idProduct) . '?ask_sent=1'
);
}
}
Este código es solo un esqueleto. Implementar la validación completa, el envío de email con una plantilla personalizada y la integración del botón requiere un poco más de trabajo. Para una solución completa y mantenible en producción, mi recomendación es utilizar un módulo preparado para pregunte por producto gratis. Estos módulos ya tienen toda la lógica de validación, seguridad (anti-spam), configuración y plantillas de correo implementadas, lo que te ahorrará muchos dolores de cabeza y te asegura compatibilidad con futuras versiones de PrestaShop.