Одна из основных функций пакета CMS, это панель управления. Попасть в нее можно по адресу http://sitename/admin (логин: admin, пароль: secret). На этом шаге мы построим CRUD-интерфейс для управления пользователями.
Для начала создадим контроллер для нашей страницы. Все контроллеры панели управления будут иметь префикс Admin - это позволяет использовать встроенный в пакет CMS функционал по ограничению доступа (см. lmbCmsAccessPolicyFilter).
Файл shop/src/controller/AdminUserController.class.php:
<?php lmb_require('limb/cms/src/controller/lmbAdminObjectController.class.php'); class AdminUserController extends lmbAdminObjectController { protected $_object_class_name = 'User'; }
По суди единственное, что нам нужно сделать - указать класс, с которым работает контроллер. Остальная функциональность уже содержится в lmbAdminObjectController и работает на основе соглашений:
Пожалуй, мы начнем с изучения шаблонов, которые будут использоваться на многих других шаблонах в панели управления и на фронтальной части. Это шаблоны:
Подробнее о тегах pager и paginate можно прочитать разделе "Постраничный вывод данных в MACRO-шаблонах".
{{wrap with="admin_page_layout.phtml" in="content_zone"}} {{include file="_admin/selectors.phtml"/}} {{include file="_admin_object/actions.phtml"/}} <div id="header"> <h1>Users</h1> <div class="header_actions"> {{apply template="object_action" action="create" is_link="true" title="Create user"/}} </div> {{include file='_admin/pager.phtml' items='{$this->items}'/}} </div> <div id="body"> {{list using="{$#items}" as="$item" counter="$counter" parity='$parity'}} <div class='list'> <table> <tr> <th>#ID</th> <th>Name</th> <th>Login</th> <th>Email</th> <th>Address</th> <th>Actions</th> </tr> {{list:item}} <tr class="{$parity}"> <td>{$item.id}</td> <td>{$item.name}</td> <td>{$item.login}</td> <td>{$item.email}</td> <td>{$item.address|raw|nl2br}</td> <td class='actions'> {{apply template="object_action_edit" item="{$item}"/}} {{apply template="object_action_delete" item="{$item}"/}} </td> </tr> {{/list:item}} {{list:empty}} <div class="empty_list">Empty</div> {{/list:empty}} </table> </div> {{/list}} </div> {{/wrap}}
Поясним некоторые моменты:
Дополнительная информация о том, как данные из ActiveRecord-ов попадает в шаблоны доступна в разделе Использование ACTIVE_RECORD в шаблонах MACRO. Предупреждение: некоторые вещи пока вам могут быть незнакомыми!
{{wrap with="admin_modal_page_layout.phtml" into="content_zone"}} {{form id='object_form' name='user_form' method='post' enctype="multipart/form-data"}} <h1>Create user</h1> {{include file='_admin/form_errors.phtml'/}} {{include file='admin_user/include/form_fields.phtml'/}} {{include file='_admin/form_buttons.phtml'/}} {{/form}} {{/wrap}}
Обратите внимание, что в качестве базового шаблона мы используем не admin_page_layout, а admin_modal_page_layout, который адаптирован для вывода внутри модального окна.
Файл shop/admin_user/edit.phtml:
{{wrap with="admin_modal_page_layout.phtml" into="content_zone"}} {{form id='object_form' name='object_form' method='post' enctype="multipart/form-data" runat='server'}} <h1>User «{$this->item.name}»</h1> {{include file='_admin/form_errors.phtml'/}} {{include file='admin_user/include/form_fields.phtml'/}} {{include file='_admin/form_buttons.phtml'/}} {{/form}} {{/wrap}}
Подробнее об тегах форм в разделе "Теги форм и элементов форм".
Так как поля для обоих форм одинаковые, мы решили вынести их в общий шаблон form_fields.phtml
Файл shop/template/admin_user/include/form_fields.html:
<div class='tabs'> <ul> <li id='properties'><a>Properties</a></li> </ul> <div id="tab_properties"> {{include file="user/include/form_fields.phtml"/}} <dl class="field"> <dt>{{label for="name"}}Password:{{/label}}</dt> <dd>{{input name='password' type='text' title='Password'/}}</dd> </dl> </div> </div>
Некоторые особенности форм на панели управления:
берет содержимое из div с id=tab_properties.
Чтобы добавить ссылку в панель создадим файл shop/settings/navigation.conf.php со следующим содержимым:
<?php require_once('limb/cms/settings/navigation.conf.php'); $conf[lmbCmsUserRoles :: ADMIN][0]['children'][] = array( "title" => "Users", "url" => "/admin_user/", "icon" => "/shared/cms/images/icons/user.png", );
Следующий шаг - "Шаг4. Создание и отображение списка товаров для администраторов". Мы создадим для администраторов сайта список товаров с разделением на страницы, сделаем формы для создания нового товара и редактирования старых, реализуем действие для удаления товаров.
Обсуждение