Любой сайт на Astra.CMS полностью состоит из экземпляров расширений трех видов: модули, плагины, блоки. Основной упор при сборке сайта сделан на работу с шаблонами и редакторами панели управления, поэтому все стандартные расширения сделаны максимально универсальными и разработка своих расширений требуется как правило в особых случаях.
Чем меньше универсальность - тем проще реализация. Для расширений под индивидуальные проекты как правило особая универсальность не требуется.
Возможность модуля обслуживать несколько разделов схожей функциональности.
Возможность из панели управления переназначать шаблоны для типов страниц раздела.
Возможность из панели управления изменять какие-то опциональные значения.
Расширения начинают работать на сайте только после того как:
Все страницы на сайте обслуживают модули. Каждый модуль реализуется с помощью класса, который наследует A_MainFrame, который в свою очередь является наследником Smarty.
Первый элемент в пути URL, автоматически распознается как идентификатор раздела, который в свою очередь и направляет поток выполнения на класс соответствующего модуля. Дальнейшая маршрутизация может осуществляться уже в самом модуле в методе A_MainFrame::Router(). Задача этого маршрутизатора, собрать первичные данные по элементам пути URL и определить тип страницы (свойство A_MainFrame::$page) и, возможно, сразу присвоить шаблон (свойство A_MainFrame::$template), либо сообщить о ненайденной странице.
Все необходимые данные для страницы (кроме глобальных) формируются в переопределяемом методе A_MainFrame::createData() и добавляются в набор данных шаблона с помощью Smarty::assign(). С помощью свойства A_MainFrame::$page установленного на этапе маршрутизации URL может осуществляться дополнительная маршрутизация по типам страниц.
Сформированные данные обрабатываются заданным шаблоном (свойство A_MainFrame::$template) и выдается итоговая страница.
Для выполнения определенного действия в GET или POST запросе необходимо передавать параметр action с идентификатором действия. Маршрутизация действий на их методы-обработчики происходит в методе A_MainFrame::Action().
Все страницы в панели управления реализуются с помощью класса, который наследует тот же A_MainFrame. Из особенностей стоит отметить что в панели управления не используется ЧПУ, поэтому маршрутизация осуществляется с помощью GET параметров, а так же то, что для выполнения действия вместе с параметром action нужно передавать параметр authcode, который содержит уникальный код авторизации администратора.
С помощью системы событий возможно внедрение своих функций в процесс работы других расширений.