Модули приложения
Под модулем приложения понимается компонент имеющий заданную структуру, а также реализующий работу с шаблонами модуля.
Все модули приложения берут за основу (наследуют) компонент Module
и располагаются в директории /modules.
Некоторые модули приложения также имеют частичную базовую реализацию в аналогичных модулях ядра /bff/modules.
Контроллер делится на 3 составляющих:
- Base - базовый контроллер. В нем выполняется общая логика контроллера модуля: инициализация компонентов, констант и обязательных методов, описанных ниже.
- Frontend - фронтенд котроллер. Методы отвечающие за отображения страниц и обработку форм на фронтенде.
- Admin - админ котроллер. Методы отвечающие за логику работу модуля в админ-панели: списки, формы, настройки.
Base контроллер наследуется от Module
, кроме случаев наличия аналогичного модуля в ядре.
Frontend и Admin конроллеры имеют идентичное название класса, одновременно доступна работа модуля только в одном из контекстов - фронтенд часть либо админ-панель.
Также в модуле реализуется работа с базой данных. Все SQL запросы следует выполнять через методы объявленные в модели модуля, основанной на классе Model
.
Общая структура файлов модуля
- tpl/def/* - шаблоны модуля: admin.* - шаблоны для админ-панели, остальные - для фронтенда
- install.sql - структура таблиц необходимая для модуля
- module.adm.class.php - контроллер админ-панели
- module.bl.class.php - базовый контроллер
- module.class.php - фронтенд контроллер
- module.model.php - модель
- m.module.class.php - меню модуля, для админ-панели
Также доступа альтернативная версия именования файлов:
- admin.php - контроллер админ-панели
- base.php - базовый контроллер
- frontend.php - фронтенд контроллер
- model.php - модель
- menu.php - меню модуля, для админ-панели
Создать базовую структуру модуля можно в debug-режиме в разделе админ-панели "Development / Создать модуль".
Класс модуля Module
Базовый класс реализующий:
- все необходимые методы работы с шаблонами модуля
- инициализацию компонентов модуля, а также вызов методов прикрепленных компонентов
- shortcut-методы работы с ошибками
- работу по формированию ссылок в админ-панели и на фронтенде
- работу с настройками сайта в рамках модуля
- часть методов SEO
- shortcut-методы обращения к некоторым базовым модулям ядра:
users
,bills
,svc
,seo
Базовые компоненты модуля
Все базовые компоненты модуля доступны через $this->
:
errors
- работа с ошибками
security
- работа с сессией
db
- работа с базой данных
input
- работа с входящими параметрами запроса GET, POST и другими
locale
- работа с локализацией и локализируемыми данными
Базовый контроллер (Base)
В базовом контроллере обязательно объявление следующих методов:
public function init()
- инициализация модуля, здесь может быть дополненна карта автозагрузки необходимыми компонентами, входящими в данный модуль.
public static i()
- shortcut-метод доступа к объекту данного модуля
/**
* Shortcut
* @return [Module]
*/
public static function i()
{
return bff::module('[module]');
}
public static model()
- shortcut-метод доступа к объекту модели данного модуля
/**
* Shortcut
* @return [Module]Model
*/
public static function model()
{
return bff::model('[module]');
}
public sendmailTemplates()
- объявление списка шаблонов писем, используемых в данном модуле
public seoTemplates()
- объявление списка SEO страниц, используемых в данном модуля
public static url()
- метод формирование URL страниц, формируемых данным модулем
Также в базовом контроллере выполняется объявление констант и методов инициализирующих компоненты входящие в данный модуль.
Инициализация модуля
Загрузка модуля выполняется средствами autoload. Инициализация объекта модуля зависит от контекста admin / frontend, управление объектами модулей и их непосредственная инициализация выполняется в классе приложения bff
.
Доступно несколько способов инициализации модуля приложения (получения объекта модуля), рассмотрим на примере модуля Users
(пользователи):
Users::i()
- доступ к контроллеру модуля через shortcut-метод (приоритетный)
bff::module('users')
- доступ к контроллеру модуля через класс приложения
Варианты вызова методов модуля:
Users::i()->testData()
- вызова метода объекта
Users::testData()
- вызова статического метода
Users::model()
- доступ к объекту модели
Таким образом, доступ к объекту модуля всегда выполняется через ключевое слово совпадающее с названием фронтенд или админ-контроллера класса модуля.
При инициализации модуля в первую очередь будет вызван метод модуля init()
.