Модули приложения

Под модулем приложения понимается компонент имеющий заданную структуру, а также реализующий работу с шаблонами модуля.

Все модули приложения берут за основу (наследуют) компонент 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().