Основная функции пакета - разработка административного web-интерфейса приложения. Помимо этого пакет предоставляет возможности по созданию и выводу страниц и текстовых блоков.
Пакет базируется на функционале WEB_APP, и представляет из себя набор моделей, контроллеров, шаблонов и сервисов. Самый простой способ создать приложение - воспользоваться утилитой limb.php:
limb project_create
Для ручного создания приложения на базе пакета CMS воспользуйтесь инструкцией.
Данный функционал позволяет создавать и управлять отдельными страницами вашего сайта.
Текст страницы вписывает в шаблон template/document/item.phtlm, который может быть перекрыт в вашем приложении.
Текстовые блоки представляют из себя куски текста, которые можно редактировать из административного интерфейса, а потом легко вставлять в любое место вашего сайта.
Блоки объявляются в конфигурационном файле text_blocks.conf.php:
<?php $conf = array( 'footer' => array('title' => 'Подвал Сайта', 'content' => '<p>Подвал</p>'), );
Поле content это первоначальное содержимое блока. После редактирования содержимое будет храниться и извлекаться из базы данных, а не из конфигурационного файла.
Получить содержимое блоков можно следующим образом:
echo lmbCmsTextBlock::getRawContent('footer');
Для автоматической генерации административного интерфейса вы можете воспользоваться пакетом CONSTRUCTOR
Все контроллеры, имена которых начинаются с admin считаются частью административного интерфейса, и проверяют пользователя на «залогиненность» (см. lmbCmsAccessPolicyFilter)
Разберем на примере добавления новостей на сайт:
Для начала создадим таблицу news:
CREATE TABLE `skel`.`news` ( `id` BIGINT(20) NOT NULL AUTO_INCREMENT, `title` VARCHAR(255) NOT NULL DEFAULT '', `content` longtext NOT NULL, `ctime` INT(11) NOT NULL, PRIMARY KEY (`id`) );
Для создания контроллеров, типичных для CRUD'ов, удобнее всего воспользоваться классом lmbAdminObjectController, в качестве базового. Для этого сначала создадим модель (файл /src/model/News.class.php):
<?php lmb_require('limb/active_record/src/lmbActiveRecord.class.php'); class News extends lmbActiveRecord {}
и контроллер (файл /src/controller/AdminNewsController.class.php)
<?php lmb_require('limb/cms/src/controller/lmbAdminObjectController.class.php'); lmb_require('src/model/News.class.php'); class AdminNewsController extends lmbAdminObjectController { protected $_object_class_name = 'News'; }
Добавим шаблоны для отображения списка новостей (файл template/admin_news/display.phtml):
{{wrap with="admin_page_layout.phtml" into="content_zone"}} <div id="header"> <h1>Новости</h1> <div class="header_actions"> <a href='{{route_url params="controller:admin_news,action:create"/}}' title="Добавить элемент" class='thickbox'><img src='/shared/cms/images/icons/page_white_add.png'/> Добавить новость</a> </div> </div> <div id="body"> {{list using='{$#items}' parity='{$parity}'}} {{include file="_admin_object/actions.phtml"/}} <div class="list"> <table> <tr> <th>#ID</th><th>Заголовок</th><th>Дата</th><th>Действия</th> </tr> {{list:item}} <tr class='{$parity}'> <td>#{$item.id}</td><td>{$item.title}</td><td>{$item.ctime|date:'Y'}</td> <td class='actions'> {{apply template="object_action_edit" item="{$item}" icon="page_white_edit" /}} {{apply template="object_action_delete" item="{$item}" icon="page_white_delete" /}} </td> </tr> {{/list:item}} </table> </div> {{/list}} </div> {{/wrap}}
, шаблон формы (файл template/admin_news/include/form_fields.phtml)
{{include file='_admin/form_errors.phtml'/}} <div class='tabs'> <ul> <li id='properties'><a href="#">Свойства</a></li> </ul> <div id="tab_properties"> <dl class="required field"> <dt><label for="title">Заголовок:</label></dt> <dd>{{input type="text" name="title" id="title" title="Заголовок"/}}</dd> </dl> <dl class="field"> <dt>{{label for="content"}}Текст:{{/label}}</dt> <dd>{{textarea name="content" id="content" title="Текст"/}}</dd> </dl> </div> </div> {{include file='_admin/form_buttons.phtml'/}}
, шаблоны для создания и редактирования новости (файлы template/admin_news/create.phtml и template/admin_news/edit.phtml)
{{wrap with="admin_modal_page_layout.phtml"}} {{into slot='content_zone'}} {{form id='object_form' name='user_form' method='post' enctype="multipart/form-data"}} <h1>Добавление новости</h1> {{include file='admin_news/include/form_fields.phtml'/}} {{/form}} {{/into}} {{/wrap}}
{{wrap with="admin_modal_page_layout.phtml" into="content_zone"}} <h1>Редактирование записи {$#item.title}</h1> {{form id='object_form' name='object_form' method='post' enctype="multipart/form-data"}} {{include file='admin_news/include/form_fields.phtml'/}} {{/form}} {{/wrap}}
Для того, чтобы расширить стандартное меню необходимо добавить необходимую опцию в navigation-конфиг. Для этого создадим в нашем проекте файл navigation.conf.php, со следующим содержимым:
<?php require_once('limb/cms/settings/navigation.conf.php'); $conf[lmbCmsUserRoles::ADMIN][0]['children'][] = array( 'title' => 'Новости', 'url' => '/admin_news', 'icon' => '/shared/cms/images/icons/page.png', );
Обсуждение