Prestashop-функция переопределения в существующем модуле prestashop

Я хотел бы изменить существующий модуль prestashop без его копирования и создания нового. Я знаю, что это можно переопределить .TPL файлы в prestashop, но можно ли сделать то же самое с классами php? Например, я хотел бы изменить blockcart, чтобы его можно было зацепить сверху. Поскольку в оригинальной версии нет этого крючка, мне нужно изменить функцию install ()! Я не могу изменить исходный источник (это было бы плохой идеей, не так ли...) файл мне нужно переопределить функцию install () наследование модуля blockcart. Можно ли это сделать и где я могу найти пример?

4 ответов


Я использую свое собственное переопределение для класса FrontController, чтобы разрешить отображение вывода модуля в произвольных точках в файлах tpl - это означает, что модулю не нужно поддерживать определенный крюк. Он реализован через плагин smarty, поэтому вы можете, например, использовать:

{plugin module='blockcart' hook='rightColumn'}

вышеприведенное заставит модуль выводить то, что он будет отображать, если он подключен к правому столбцу, где выше вставлен тег (который может быть в любом месте в любом файле tpl). Вы можете "отцепить" модуль от правый столбец, так что он отображает только там, где вы хотите, чтобы использовать эту технику. Я использовал его на производственной площадке с большим успехом.

существует ряд статей, описывающих, как он работает (с требуемым кодом), доступных по адресу:

Prestashop 1.4 Плагины


в Prestashop 1.4 вы можете переопределить основные классы и шаблоны модулей Сегодня это невозможно переопределить файл php модуля, но мы работаем над этим.


начиная с версии 1.6.0.11 PrestaShop, появилась новая функция, позволяющая разработчикам переопределять классы экземпляров модуля.

переопределите класс экземпляра модуля, расширив его Чтобы переопределить класс экземпляра модуля, его необходимо расширить, присвоив расширенному классу то же имя и добавив суффикс переопределения:

<?php
if (!defined('_PS_VERSION_'))
    exit;
class BlockUserInfoOverride extends BlockUserInfo
{
    public function hookDisplayNav($params)
    {
        return '<div class="header_user_info"><a>Test</a></div>';
        // return $this->display(__FILE__, 'nav.tpl');
    }
}

источник:http://build.prestashop.com/howtos/module/how-to-override-modules/


в переопределении\modules\blockcart\blockcart.php (создайте его, если он еще не существует)

<?php 
    class BlockCartOverride extends BlockCart
    {
        public function hookDisplayTop($params)
        {
            return parent::hookTop($params);
        }
    }
?>

как это можно заменить любой модуль hookable по умолчанию или пользовательские крюк. не забудьте удалить cache / class_index.php для переопределения для работы:)