Документация InstantCMS

для администраторов и разработчиков

Инструменты пользователя

Инструменты сайта


dev:controllers:custom

Переопределение контроллеров

Как мы знаем, основной файл frontend-контроллера это файл /system/controllers/{имя компонента}/frontend.php. Иногда может возникнуть потребность, не внося изменений в этот файл, дополнить функциональность контроллера или вовсе его изменить. Для этого в CMS можно создать файл /system/controllers/{имя компонента}/custom.php.

Класс контроллера

В этом файле вы должны определить класс {имя компонента}_custom, унаследовав его от класса контроллера, объявленного в основном файле frontend-контроллера.

В простейшем случае класс выглядит так:

class shop_custom extends shop {
 
    public function __construct($request) {
 
        $this->name = str_replace('_custom', '', strtolower(get_called_class()));
 
        parent::__construct($request);
    }
 
}

где shop - название компонента, совпадающие с названием его папки. Конструктор класса обязателен, в примере показано его минимальное содержимое.

Конечно же, вы можете унаследовать класс и от системного класса cmsFrontend и реализовать полностью свою логику выбранного компонента, также, как бы вы это делали в файле /system/controllers/{имя компонента}/frontend.php.

Определение действий

В этом файле вы можете переопределить/дополнить любой метод класса, начиная от основного контроллера (cmsController), заканчивая непосредственно вашим основным контроллером. Вы можете переопределить любой экшен, даже если он находится не в основном классе, а в папке actions директории контроллера.

Таким образом, вы можете переопределить любое поведение выбранного контроллера.

Переопределение действий во внешних файлах

Ядро сначала проверяет наличие внешнего экшена, а потом уже ищет внутренние. Поэтому, чтобы переопределить внешний экшен, нам нужно его переименовать воспользовавшись методом routeAction. Например:

    public function routeAction($action_name){
 
        if($action_name === 'index'){ $action_name = 'external_index'; }
 
        return $action_name;
 
    }

И после этого определить метод экшена с новым именем:

    public function actionExternalIndex($params){
 
        /****/
 
    }

Не забудьте, что некоторые контроллеры уже могут содержать переопределение метода routeAction в своем файле frontend.php, соответственно вам нужно будет переопределять именно этот метод со всей логикой определенной в нем.


Вернуться к оглавлению

dev/controllers/custom.txt · Последние изменения: 01.11.2018 14:24 — piligrim