Prestashop - функция переопределения в существующем модуле prestashop - PullRequest
7 голосов
/ 26 мая 2011

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

Ответы [ 4 ]

10 голосов
/ 03 сентября 2011

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

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

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

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

Prestashop 1.4 Плагины

2 голосов
/ 31 августа 2011

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

0 голосов
/ 15 мая 2018

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

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

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

0 голосов
/ 31 мая 2016

Начиная с версии 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/

...