Jump to content

Edit History

joseantgv

joseantgv

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.

joseantgv

joseantgv

54 minutes 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 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 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.

joseantgv

joseantgv

48 minutes 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 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();
    }
}

 

×
×
  • Create New...