Отображение проекта интерфейса в публичной части сайта
В данном примере рассмотрим размещение проектов дизайнера интерфейсов в публичной части сайта.
Изначально платформа спроектирована из представления, что бэкофис будет находиться в панели управления платформы.
Пользователи получают права доступа и заходят в административную панель, при этом имеют доступ к набору модулей ограниченному правами группы. Модули, связанные с разработкой, отключены в production-режиме системы.
Может возникнуть потребность перенести части функционала в публичную часть сайта, таким образом, отказавшись от основного layout административной панели и используя собственные шаблоны.
Представим, что разработчик решил использовать свой шаблон кабинета пользователя, поместив его в публичной части и ограничив доступ при помощи стандартных методов аутентификации.
Для примера возьмем модуль News из demo-сборки проекта.
Задача вынести редактор новостей во frontend наименьшими усилиями.
Для этого нам понадобится:
- создать контроллер публичной части, отвечающий за управление новостями;
- отобразить проект дизайнера интерфейса в публичном шаблоне;
- создать модуль публичной части;
- прикрепить функциональность к странице.
Создаем контроллер Frontend_Newsadmin_Controller:
<?php
class Frontend_Newsadmin_Controller extends Frontend_Controller_Backoffice
{
public function getModule()
{
return 'News';
}
public function indexAction()
{
parent::indexAction();
$this->_runDesignerProject('./system/config/layouts/news.designer.dat' ,'content');
}
}
Контроллер отнаследован от Frontend_Controller_Backoffice, который в свою очередь реализует логику работы с интерфейсами, созданными в дизайнере.
Переопределим метод getModule(), чтобы он возвращал 'News'. Это имя модуля, для которого проверяется соответствие прав доступа пользователя обращающегося к методам контроллера.
Доопределим метод indexAction, запустим в нем рендеринг проекта дизайнера интерфейсов.
_runDesignerProject принимает два аргумента:
- путь к файлу проекта;
- id DOM объекта, в который необходимо отрендерить проект, в нашем случае это ‘content’ слой находящийся в шаблоне.
Добавляем модуль публичной части:
Создаем страницу, прикрепляем к ней функциональность:
Далее можно добавить ссылку на новую страницу в меню, по вашему вкусу.
В результате таких нехитрых манипуляций получаем работоспособный интерфейс управления новостями встроенный в шаблон публичной части.
Если пользователь не авторизован ему отобразится форма, расположенная в файле www/templates/public/backoffice_login.php, ее легко изменить под свои нужды.
Авторизированный пользователь получит следующий интерфейс: