Override PHP для стандартного модуля

Riva

Папочка
Регистрация
2 Мар 2013
Сообщения
560
Реакции
661
Попытался в PS1.7 прикрутить изображение к модулю банковского перевода. Для этого сделал overrride по адресу Для просмотра ссылки Войди или Зарегистрируйся с таким кодом. Картинка не появляется. Кеш чистил. Что не так я делаю?

Код:
<?php
if (!defined('_CAN_LOAD_FILES_'))
    exit;

class Ps_WirepaymentLinksOverride extends PaymentModule
{
    public function hookPaymentOptions($params)
    {
        $newOption->setModuleName($this->name) ->setLogo(Media::getMediaPath(_PS_MODULE_DIR_.$this->name.'/ps_wirepayment.png'));
    parent::hookPaymentOptions($params);
    }
}
 
Попытался в PS1.7 прикрутить изображение к модулю банковского перевода. Для этого сделал overrride по адресу Для просмотра ссылки Войди или Зарегистрируйся с таким кодом. Картинка не появляется. Кеш чистил. Что не так я делаю?

Код:
<?php
if (!defined('_CAN_LOAD_FILES_'))
    exit;

class Ps_WirepaymentLinksOverride extends PaymentModule
{
    public function hookPaymentOptions($params)
    {
        $newOption->setModuleName($this->name) ->setLogo(Media::getMediaPath(_PS_MODULE_DIR_.$this->name.'/ps_wirepayment.png'));
    parent::hookPaymentOptions($params);
    }
}
Объявление класса неправильное.
Код:
class Ps_WirepaymentLinksOverride extends PaymentModule
надо заменить на
Код:
class Ps_WirepaymentOverride extends Ps_Wirepayment
 
Не работает ваш вариант

Сейчас стоит так в
/override/modules/ps_wirepayment/ps_wirepayment.php

и сама картинка находится в
/modules/ps_wirepayment/ps_wirepayment.png

Код:
<?php
if (!defined('_CAN_LOAD_FILES_'))
    exit;

class Ps_WirepaymentLinksOverride extends Ps_Wirepayment
{
    public function hookPaymentOptions($params)
    {
        $newOption->setModuleName($this->name) ->setLogo(Media::getMediaPath(_PS_MODULE_DIR_.$this->name.'/ps_wirepayment.png'));
    parent::hookPaymentOptions($params);
    }
}
 
Не работает ваш вариант

Сейчас стоит так в
/override/modules/ps_wirepayment/ps_wirepayment.php

и сама картинка находится в
/modules/ps_wirepayment/ps_wirepayment.png

Код:
<?php
if (!defined('_CAN_LOAD_FILES_'))
    exit;

class Ps_WirepaymentLinksOverride extends Ps_Wirepayment
{
    public function hookPaymentOptions($params)
    {
        $newOption->setModuleName($this->name) ->setLogo(Media::getMediaPath(_PS_MODULE_DIR_.$this->name.'/ps_wirepayment.png'));
    parent::hookPaymentOptions($params);
    }
}
Вы не понимаете как работает оверрайд и что делается внутри функции hookPaymentOptions(). Даже не видите, что $newOption берется у вас из ниоткуда и потом никуда не отдается. Объяснять и расписывать как сделать правильно - это долго. Поэтому полностью скопируйте оригинальную функцию из модуля и в код
Код:
        $newOption->setModuleName($this->name)
                ->setCallToActionText($this->trans('Pay by bank wire', array(), 'Modules.Wirepayment.Shop'))
                ->setAction($this->context->link->getModuleLink($this->name, 'validation', array(), true))
                ->setAdditionalInformation($this->fetch('module:ps_wirepayment/views/templates/hook/ps_wirepayment_intro.tpl'));
добавьте вставку логотипа. В данный момент ваш вариант оверрайда бесполезный.
 
Неа, не пашет

Код:
<?php
if (!defined('_CAN_LOAD_FILES_'))
    exit;

class Ps_WirepaymentLinksOverride extends Ps_Wirepayment
{
    public function hookPaymentOptions($params)
    {
        if (!$this->active) {
            return [];
        }

        if (!$this->checkCurrency($params['cart'])) {
            return [];
        }

        $this->smarty->assign(
            $this->getTemplateVarInfos()
        );

        $newOption = new PaymentOption();
        $newOption->setModuleName($this->name)
                ->setCallToActionText($this->trans('Pay by bank wire', array(), 'Modules.Wirepayment.Shop'))
                ->setAction($this->context->link->getModuleLink($this->name, 'validation', array(), true))
->setLogo(Media::getMediaPath(_PS_MODULE_DIR_.$this->name.'/ps_wirepayment.png'))
                ->setAdditionalInformation($this->fetch('module:ps_wirepayment/views/templates/hook/ps_wirepayment_intro.tpl'));
        $payment_options = [
            $newOption,
        ];

        return $payment_options;
    }
}
 
Убрать проверку константы (if (!defined('_CAN_LOAD_FILES_')) exit;), она здесь нафиг не нужна. В самом начале добавить
use PrestaShop\PrestaShop\Core\Payment\PaymentOption;

Включить режим отладки и проверить.

P.S. Остальные способы оплаты с логотипами? А то иногда шаблоны урезанные бывают, без вывода логотипов.
 
Всё заработало, спасибо.
 
Назад
Сверху