zigurat Posted July 3, 2013 Share Posted July 3, 2013 Buenas, Estoy intentando sobrescribir un par de clases en Prestashop 1.5. Me funciona parcialmente, y no entiendo el porqué: En primer lugar sobrescribí la clase PaymentModule en la carpeta "override/classes/PaymentModule.php". Hasta aquí bien, funciona y la llama correctamente el sistema. El problema es que dentro de esta clase, utilizo una llamada a un método estático de otra clase sobrescrita, "Mail.php", que también he colocado en "/override/classes/Mail.php". Al ver que no acababa de funcionar todo el proceso, he consultado el log de errores de PHP y veo que el sistema no es capaz de encontrar el método utilizado de la clase "Mail.php", puesto que no está utilizando el de la carpeta "override" si no el original (y allí no existe ese método, lo he creado yo). ¿A qué puede deberse? Ayer me sucedía lo contrario, que no utilizaba la clase PaymentModule en la carpeta override si no el original, y lo que hice (aconsejado por leerlo en otros foros) fue borrar el class_index.php de la carpeta cache. Pero ahora esto ya no surge efecto. El código es más o menos este (omito parte del código): override/classes/PaymentModule.php abstract class PaymentModule extends PaymentModuleCore { (···) } private function _enrol($id_order) { (···) Mail::sendMail($params); // aquí llama a la clase Mail original en lugar de la situada en la carpeta override..¿?¿? } override/classes/Mail.php class Mail extends MailCore { public static function sendMail($subject, $content, $to, $from) { (···) } } ¿Alguna idea? ¡Gracias! Link to comment Share on other sites More sharing options...
joseantgv Posted July 3, 2013 Share Posted July 3, 2013 Si añades la función sendMail en la clase y no en el override, te funciona? Link to comment Share on other sites More sharing options...
Rolige Posted July 3, 2013 Share Posted July 3, 2013 En algunas versiones de PS 1.5 por defecto no incluye las clases override y por ende en archivo index no las toma, solo elimina el archivo class_index.php en la ruta www.myshop.com/cache y con esto vuelve a intentar y ahora si te tomara las clases override que hayas agregado, saludos. Link to comment Share on other sites More sharing options...
zigurat Posted July 3, 2013 Author Share Posted July 3, 2013 En algunas versiones de PS 1.5 por defecto no incluye las clases override y por ende en archivo index no las toma, solo elimina el archivo class_index.php en la ruta www.myshop.com/cache y con esto vuelve a intentar y ahora si te tomara las clases override que hayas agregado, saludos. De hecho en mi post original ya digo que borré el archivo class_index.php, sin éxito. Incluso lo he abierto y buscado dentro la clase Mail y efectivamente, el código lo coge de la carpeta override/classes... con lo cual entiendo aún menos lo que sudece. Link to comment Share on other sites More sharing options...
zigurat Posted July 3, 2013 Author Share Posted July 3, 2013 Si añades la función sendMail en la clase y no en el override, te funciona? Tampoco, acabo de probarlo (y he renombrado el archivo de override para que no haga cosas raras). PHP escribe el siguiente error en el log: PHP Fatal error: Call to undefined method Mail::sendMail() in c:\apps\prestashop\overrides\classes\PaymentModule.php on line 71 Link to comment Share on other sites More sharing options...
Rolige Posted July 3, 2013 Share Posted July 3, 2013 A bueno el error ahora es de código pero ahora si te hace referencia a la clase override y en tus mensajes anteriores no. Link to comment Share on other sites More sharing options...
zigurat Posted July 3, 2013 Author Share Posted July 3, 2013 Si, pero a qué se debe el error? el método sendMail existe en la clase Mail dentro de la carpeta override... Link to comment Share on other sites More sharing options...
Rolige Posted July 3, 2013 Share Posted July 3, 2013 Mira en la clase de override/classes/PaymentModule.php debes tenerla asi: <?php abstract class PaymentModule extends PaymentModuleCore { } Y la clase de override/classes/Mail.php debes tenerla asi: <?php class Mail extends MailCore { } Ahora veo que en la clase Payment tienes una funcion llamada _enrol, que a su ves esta llama a otra funcion de la clase Mail, quiza el problema sea que la estas definiendo estatica, trata quitando estatica y dejala solo como publica. No se que es lo que intentes realizar pero creo que cualquier cosa de estas las podrias realizar desde tu modulo o no se desde donde lo quieras utilizar. Link to comment Share on other sites More sharing options...
Recommended Posts