2016-05-26 2 views
1

Я хотел бы отредактировать и добавить функции на страницу предварительного магазина Storeashator. Документация Prestashop не совсем понятна, и я хотел бы знать, возможно ли реализовать контроллер в настраиваемом модуле. Я хотел бы создать модуль, способный расширять StoreFrontController и его функции без запуска с нуля. Возможно ли это? У вас есть документация для меня?Переопределить и использовать функции переднего контроллера в модуле prestashop [1.6.x.x]

Начальный разряд, Лучший.

+0

Извините, моя версия prestashop 1.6.1.5. –

+0

Какие функции вы хотели бы добавить? –

+0

Если вы хотите добавить дополнительную информацию, процесс будет отличаться, если вы хотите изменить данные. –

ответ

0

Поскольку у вас есть много требований, вам придется перейти с переопределением класса StoresController.php.

Папка модуль должен выглядеть следующим образом:

/mymodule 
    /mymodule.php 
    /config.xml 
    /override 
     /controllers 
       /front 
        StoresController.php 
    /views 
     /templates 
       /front 
        stores.tpl 

В StoresController.php вам придется переопределить initContent():

<?php 

class StoresController extends StoresControllerCore 
{ 

    /** 
    * Assign template vars related to page content 
    * @see FrontController::initContent() 
    */ 
    public function initContent() 
    { 
     parent::initContent(); 

     // here add any smarty variables you want 

     $this->setTemplate(_PS_MODULE_DIR_.'mymodule/views/templates/front/stores.tpl'); 
    } 
} 

Теперь вы можете добавить столько переменных, сколько вы хотите в этом контроллере и заказной его шаблон в вашем собственном модуле.


Мы создаем переопределение в модуле, оно будет обрабатываться только один раз при установке. Если ваш модуль уже установлен, вам придется удалить его и снова установить. Затем ваш файл переопределения будет скопирован в корневую папку /override.

Любые изменения, внесенные в ваше переопределение модуля, не будут отображаться в корневую папку переопределения. Поэтому вам придется удалять и устанавливать ваш модуль каждый раз, когда вы хотите внести изменения.

Поэтому я советую вам внести все свои изменения непосредственно в корневую папку переопределения, а когда вы закончите, скопируйте этот файл обратно в папку вашего модуля. И если вы не хотите удалять свой модуль и устанавливать его снова, чтобы объявить этот файл, вы можете поместить его прямо в папку корневого переопределения и удалить файл /cache/class_index.php, чтобы Prestashop знал, что добавлены переопределения.

Если у вас есть какие-либо вопросы :)

+0

Благодарим вас за ваше время и ваши советы. Это действительно неуловимо. У меня есть еще один вопрос, я не знаком с prestashop, поэтому хочу понять. Если я переопределяю этот контроллер в своем модуле, он будет работать нормально? Я имею в виду, только мои изменения изменят поведение контроллера, остальное будет работать так, как будто я ничего не изменил! –

+0

Что вы подразумеваете под нормальным? Ваше переопределение расширяет Core StoresControllerCore. Когда Prestashop загрузит StoresController, он сначала будет искать переопределение и найти ваш. Затем он будет обрабатывать его, как любой класс контроллера. –

+0

«Я имею в виду, только мои изменения изменят поведение контроллера, остальное будет работать так, как будто я ничего не изменил!» это оно. Вы можете изменить контроллер так, как вы хотите, в своем переопределении, но любой метод, который вы не изменили, будет работать нормально. –

0

Вы можете начать с перекрывая фронт-контроллера, как

`"/modules/mymodule/override/controllers/front/StoresController.php" and in this fine add class "class StoresControllerCore extends FrontController { 
public function initContent() 
    { 
     parent::initContent(); 
//here do whatever you like 
} 
}" 

хотя вы должны знать, кодирование идти дальше.

+0

Спасибо! Флориан дал мне решение, и он отлично работает! –