Eusebio100 Posted December 8, 2018 Share Posted December 8, 2018 (edited) Hola, estoy intentando hacer un override en override/classes/controller/ModuleFrontController.php pero no me funciona, sin embargo si realizo la misma modificación directamente en classes/controller/ModuleFrontController.php sí que funciona perfectamente. Por supuesto que siempre borro el class_index.php en todos los casos, pero en override no funciona. El override de marras es este: <?php class ModuleFrontController extends ModuleFrontControllerCore { public function initContent() { if (Tools::isSubmit('module') && Tools::getValue('controller') == 'payment') { $currency = Currency::getCurrency((int)$this->context->cart->id_currency); $orderTotal = $this->context->cart->getOrderTotal(); $minimal_purchase = Tools::convertPrice((float)Configuration::get('PS_PURCHASE_MINIMUM'), $currency); if ($this->context->cart->getOrderTotal(true, Cart::ONLY_PRODUCTS) < ($minimal_purchase - 1)) { Tools::redirect('index.php?controller=order&step=1'); } } parent::initContent(); } } Alguien sabría decirme por que no funciona? Gracias de antemano. Edited December 11, 2018 by Eusebio100 (see edit history) Link to comment Share on other sites More sharing options...
Eusebio100 Posted December 10, 2018 Author Share Posted December 10, 2018 No entiendo mucho del tema, pero le he dado unas vueltas y parece que la clase modulefrontcontroller ya viene extendida desde los módulos, por lo que parece que desde los módulos no se busca el override de la mencionada clase. Me gustaría que alguien que domine el tema me confirme si esto es así y si realmente no se puede hacer override de la clase modulefrontcontroller y que las modificaciones tengan efecto. Link to comment Share on other sites More sharing options...
joseantgv Posted December 10, 2018 Share Posted December 10, 2018 Te debería funciona. Has puesto una traza al principio de la función para comprobar que no entra? Link to comment Share on other sites More sharing options...
Eusebio100 Posted December 10, 2018 Author Share Posted December 10, 2018 (edited) hace 11 minutos, joseantgv dijo: Has puesto una traza al principio de la función para comprobar que no entra? A que te refieres? no entiendo bien. Esta función afecta a algunos módulos, y lo que he comprobado es que el módulo bankwire la coge perfectamente si modifico el archivo classes/controllers/ModuleFrontController.php, pero si dejo el archivo original y meto en override/classes/controllers el archivo que he puesto en el primer post no funciona el módulo (quiero decir que no coge la modificación). Edited December 10, 2018 by Eusebio100 (see edit history) Link to comment Share on other sites More sharing options...
joseantgv Posted December 11, 2018 Share Posted December 11, 2018 22 hours ago, Eusebio100 said: A que te refieres? no entiendo bien. Esta función afecta a algunos módulos, y lo que he comprobado es que el módulo bankwire la coge perfectamente si modifico el archivo classes/controllers/ModuleFrontController.php, pero si dejo el archivo original y meto en override/classes/controllers el archivo que he puesto en el primer post no funciona el módulo (quiero decir que no coge la modificación). Me refiero que pongas esto a ver si se para: <?php class ModuleFrontController extends ModuleFrontControllerCore { public function initContent() { var_dump('Override'); die(); if (Tools::isSubmit('module') && Tools::getValue('controller') == 'payment') { $currency = Currency::getCurrency((int)$this->context->cart->id_currency); $orderTotal = $this->context->cart->getOrderTotal(); $minimal_purchase = Tools::convertPrice((float)Configuration::get('PS_PURCHASE_MINIMUM'), $currency); if ($this->context->cart->getOrderTotal(true, Cart::ONLY_PRODUCTS) < ($minimal_purchase - 1)) { Tools::redirect('index.php?controller=order&step=1'); } } parent::initContent(); } } 1 Link to comment Share on other sites More sharing options...
Eusebio100 Posted December 11, 2018 Author Share Posted December 11, 2018 hace 39 minutos, joseantgv dijo: Me refiero que pongas esto a ver si se para: Lo acabo de probar y sí que se para, por lo que entiendo que el override lo lee, sin embargo si quito la "traza" hace caso omiso y carga la función del archivo original en classes/controller. Parece como que lee el override pero después vuelve al archivo original y carga los valores de allí. Link to comment Share on other sites More sharing options...
Eusebio100 Posted December 11, 2018 Author Share Posted December 11, 2018 hace 1 hora, joseantgv dijo: Me refiero que pongas esto a ver si se para: <?php class ModuleFrontController extends ModuleFrontControllerCore { public function initContent() { var_dump('Override'); die(); if (Tools::isSubmit('module') && Tools::getValue('controller') == 'payment') { $currency = Currency::getCurrency((int)$this->context->cart->id_currency); $orderTotal = $this->context->cart->getOrderTotal(); $minimal_purchase = Tools::convertPrice((float)Configuration::get('PS_PURCHASE_MINIMUM'), $currency); if ($this->context->cart->getOrderTotal(true, Cart::ONLY_PRODUCTS) < ($minimal_purchase - 1)) { Tools::redirect('index.php?controller=order&step=1'); } } parent::initContent(); } } Me acabo de dar cuenta que el problema está en la línea parent::initContent(); parent hace que se ejecute el código principal, por lo que vuelve de nuevo al código padre en classes/controller. He probado eliminando la línea parent::initContent(); y efectivamente funciona el override; ahora la duda que tengo es... ¿si en el código padre está el parent::initContent(); me puede afectar en algo el eliminarla? Link to comment Share on other sites More sharing options...
joseantgv Posted December 11, 2018 Share Posted December 11, 2018 (edited) 3 hours ago, Eusebio100 said: Me acabo de dar cuenta que el problema está en la línea parent::initContent(); parent hace que se ejecute el código principal, por lo que vuelve de nuevo al código padre en classes/controller. He probado eliminando la línea parent::initContent(); y efectivamente funciona el override; ahora la duda que tengo es... ¿si en el código padre está el parent::initContent(); me puede afectar en algo el eliminarla? Hay que entender como funciona los overrides (herencia) para saber cuando hay que utilizar el parent. Cuando sobreescribes una función lo que haces es que ejecute la tuya en vez de la original. Entonces depende de cada caso te interesará que se ejecute la función padre o no. En tu caso no te interesa que se ejecute la función initContent() de la clase padre ModuleFrontControllerCore, pero sí que te interesa ejecutar la función initContent() de la clase padre del padre, o sea, la clase padre de ModuleFrontControllerCore, que es FrontController, por lo que tendrías que poner: <?php class ModuleFrontController extends ModuleFrontControllerCore { public function initContent() { if (Tools::isSubmit('module') && Tools::getValue('controller') == 'payment') { $currency = Currency::getCurrency((int)$this->context->cart->id_currency); $orderTotal = $this->context->cart->getOrderTotal(); $minimal_purchase = Tools::convertPrice((float)Configuration::get('PS_PURCHASE_MINIMUM'), $currency); if ($this->context->cart->getOrderTotal(true, Cart::ONLY_PRODUCTS) < ($minimal_purchase - 1)) { Tools::redirect('index.php?controller=order&step=1'); } } FrontController::initContent(); } } Es decir, la función initContent() de la clase ModuleFrontControllerCore ejecuta una líneas de código y llama a initContent() de la clase FrontController. En tu caso la función initContent() de la clase ModuleFrontController ejecuta unas líneas de código, no necesitas ejecutar la función initContent() de la clase ModuleFrontControllerCore, y luego llamas a initContent() de la clase FrontController. Edited December 11, 2018 by joseantgv (see edit history) Link to comment Share on other sites More sharing options...
Eusebio100 Posted December 11, 2018 Author Share Posted December 11, 2018 hace 1 hora, joseantgv dijo: Hay que entender como funciona los overrides (herencia) para saber cuando hay que utilizar el parent. Millón de gracias por la explicación!!! Se nota que no soy informático y llego hasta donde llego. Me acabas de solucionar un problema y creo que otros similares que tengo guardados en el cajón. Te debo una birra. 1 Link to comment Share on other sites More sharing options...
joseantgv Posted December 11, 2018 Share Posted December 11, 2018 24 minutes ago, Eusebio100 said: Millón de gracias por la explicación!!! Se nota que no soy informático y llego hasta donde llego. Me acabas de solucionar un problema y creo que otros similares que tengo guardados en el cajón. Te debo una birra. Por eso es importante aclarar primero si se está ejecutando la función para descartar que sea un problema con el override, y luego ver si es un problema con el código en si. Link to comment Share on other sites More sharing options...
PepeFernandez Posted May 9 Share Posted May 9 On 12/11/2018 at 2:12 PM, joseantgv said: Por eso es importante aclarar primero si se está ejecutando la función para descartar que sea un problema con el override, y luego ver si es un problema con el código en si. Y en el caso de que no lo lea? yo he probado el die() en mi función del override y no la para, puedes echarme una mano para entender porque no me lee el override? mi problema está detallado en este hilo:https://www.prestashop.com/forums/topic/1087194-crear-variables-globales-para-las-tpl/ Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now