====== Общие принципы и идеология ====== Любой сайт на Astra.CMS полностью состоит из экземпляров расширений трех видов: модули, плагины, блоки. Основной упор при сборке сайта сделан на работу с шаблонами и редакторами панели управления, поэтому все стандартные расширения сделаны максимально универсальными и разработка своих расширений требуется как правило в особых случаях. ===== Уровни универсальности расширений ===== Чем меньше универсальность - тем проще реализация. Для расширений под индивидуальные проекты как правило особая универсальность не требуется. ==== Размножаемость ==== Возможность модуля обслуживать несколько разделов схожей функциональности. ==== Переопределяемые шаблоны страниц ==== Возможность из панели управления переназначать шаблоны для типов страниц раздела. ==== Набор настраиваемых опций ==== Возможность из панели управления изменять какие-то опциональные значения. ===== Экземпляры расширений ===== Расширения начинают работать на сайте только после того как: - они установлены (зарегистрированы в системе) - на их базе создан компонент сайта: раздел, дополнение или блок. За исключением особого вида плагинов, которые работают сразу после установки и не требуют создания своего экземпляра для сайта. ===== Страницы на сайте ===== Все страницы на сайте обслуживают модули. Каждый модуль реализуется с помощью класса, который наследует [[http://code.a-cms.ru/class_a___main_frame.html|A_MainFrame]], который в свою очередь является наследником [[http://code.a-cms.ru/class_smarty.html|Smarty]]. ==== Маршрутизация URL на сайте ==== Первый элемент в пути 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(). ===== Страницы в панели управления ===== Все страницы в панели управления реализуются с помощью класса, который наследует тот же [[http://code.a-cms.ru/class_a___main_frame.html|A_MainFrame]]. Из особенностей стоит отметить что в панели управления не используется ЧПУ, поэтому маршрутизация осуществляется с помощью GET параметров, а так же то, что для выполнения действия вместе с параметром action нужно передавать параметр authcode, который содержит уникальный код авторизации администратора. ===== События ===== С помощью [[:coding:events|системы событий]] возможно внедрение своих функций в процесс работы других расширений. ===== Примеры ===== * [[:coding:module|Пример разработки простейшего модуля]]. * [[:coding:plugin|Пример разработки простейшего плагина]]. * [[:coding:block|Пример разработки простейшего блока]].