====== Архитектурные особенности и терминология ====== Возможности конструирования в среде Astra.CMS позволяют решать подавляющее большинство задач возникающих перед веб-разработчиком. При этом как правило __не требуется вмешательство в исходные коды скриптов__, достаточно представлять возможности каждого из [[#Расширения|расширений]] и иметь навыки их использования при конструировании нужного сайта. Каждый сайт может иметь индивидуальную структуру, кирпичиками для строительства которой являются [[#экземпляры расширений|экземпляры расширений]]. Для конструирования доступны [[:build:index|необходимые инструменты]] быстрого создания, изменения или добавления компонентов сайта. Они доступны администратору сайта в меню "Сайт" панели управления. ===== Расширения ===== Расширения условно разделяются на три типа: [[#модули|модули]], [[#плагины|плагины]], [[#блоки|блоки]]. Следует отметить, что факт установленного расширения еще не означает его активность и присутствие на сайте. Их следует воспринимать как некоторое хранилище или библиотеку готовых функциональных решений. Добавлять те или иные возможности следует уже созданием [[#экземпляры расширений|экземпляра конкретного расширения]]. Кроме того, структурные особенности Astra.CMS позволяют размножать подобные экземпляры в любом необходимом количестве. Так же это позволяет собрать сайт с именно тем набором компонентов который нужен, как результат - более наглядная навигация в [[:admin:index|панели управления]], не перегруженная ненужным функционалом. ===== Модули ===== Модули, служат базой для создания [[sections|разделов]], которые в свою очередь представляют собой определенные хранилища данных. Каждый модуль несет в себе определенную структуру данных, функциональность и имеет свои типы страниц на сайте, за вывод данных в которых уже отвечает [[#Шаблонизатор и шаблоны|шаблонизатор]]. Посмотреть [[modules|все доступные модули]]. ===== Плагины ===== Плагины, служат базой для создания [[structures|дополнений]], которые могут иметь произвольную функциональность, дополнять возможности модулей, системы, либо служить хранилищем данных определенного формата. Принципиальное отличие от [[#модули|модуля]] состоит в том, что плагин не имеет своих страниц на сайте, но может дополнять своими данными страницы модулей. Посмотреть [[plugins|все доступные плагины]]. ===== Блоки ===== Блоки служат для вывода определенных данных на любых страницах сайта. Он может быть ассоциирован с данными определенного раздела, или иметь свою природу данных для вывода. Располагаться блоки могут на любых типах страниц, от любых модулей. Могут быть упорядочены в условные массивы колонок (левые, правые), либо вставляться непосредственно в шаблон выбранной страницы. Посмотреть [[blocks|все доступные блоки]]. ===== Экземпляры расширений ===== Это уже описанные выше: **разделы**, **дополнения**, **блоки**. Из них собирается сайт именно с той организацией данных и внешнего представления – что требуется. Произвольное комбинирование этих компонентов позволяет создавать и легко расширять любые сайты. ===== Типы страниц ===== Каждый [[#модули|модуль]] и, как следствие, его экземпляр – [[sections|раздел]], имеет определенный набор типов страниц. За каждым типом закреплен [[#Шаблонизатор и шаблоны|шаблон]], который описывает вывод данных на странице. ===== Пример ===== Например, модуль [[modules:catalog|"Каталог материалов"]] имеет 3 типа страниц: * [[modules:catalog:templates#лавная страница ([раздел]_main.tpl)|Главная страница]] – вывод полного списка материалов с произвольной сортировкой; * [[modules:catalog:templates#Cтраница категории ([раздел]_category.tpl)|Страница категории]] – описание текущей категории и список подкатегорий и материалов в ней; * [[modules:catalog:templates#Детальная страница ([раздел]_page.tpl)|Детальная страница]] – детальная страница с полной информацией о записи каталога. {{ :termin1.jpg }} В предложенной выше блок-схеме, показана ситуация, когда на базе Модуля 1, создано два раздела, у каждого из которых — три типа страниц. На базе Модуля 2 создан один раздел. Имеющийся блок – отображается на выбранных типах страниц. Рассмотрим такую ситуацию на конкретном примере. {{ :termin2.jpg }} Модуль [[modules:catalog|"Каталог материалов"]] несет в себе функциональность, позволяющую организовывать иерархические каталоги произвольного формата. Он подходит для создания таких разделов как "Cтатьи" и "Новости". Модуль [[modules:feedback|"Обратная связь"]] несет в себе функциональность отправки данных из формы на сайта на заданный email. Он подходит для организации таких разделов как "Контакты" или специальные формы заказа. Установка дополнительных расширений, создание новых разделов, блоков, их интеграция в тему дизайна, происходит только средствами панели управления. Вмешательство в исходный код расширений, может потребоваться только в уникальных проектах или особых случаях. ===== Конфигурации ===== Под понятием конфигурации сайта, здесь понимается собственно уже готовый сайт, с определенной структурой разделов, данными, файлами, шаблонами представления, а так же расширениями не входящими в стандартный состав дистрибутива. Конфигурация сайта хранится в одном файле и может быстро импортироваться на установленной системе Astra.CMS. Экспортировать существующий сайт в файл конфигурации так же предельно просто. Это позволяет сохранять заготовки различных сайтов, чтобы потом максимально быстро создавать новые сайты. Например можно один раз собрать определенного вида интернет магазин, сохранить его, и далее только менять дизайн на уровне шаблонов. {{ :termin3.jpg }} Импорт конфигурации в уже существующий сайт, может полностью заменить в нем данные на уровне базы данных, шаблоны представления и пользовательские файлы. Таким образом, как правило, конфигурация импортируется на этапе установки нового сайта или, например, для быстрого переноса разрабатываемого сайта из локального расположения на сервер в интернете. ===== Шаблонизатор и шаблоны ===== Архитектура Astra.CMS подразумевает разделение логики формирования данных и логики представления. За формирование наборов данных для типов страниц отвечают [[#модули|модули]]. После распознавания адреса страницы и определения ее принадлежности разделу и типа, происходит формирование определенного набора данных, который уже передается шаблонизатору. В качестве шаблонизатора используется [[smarty|Smarty]] имеющий очень мощный и гибкий язык шаблонов, который расширен многими дополнительными инструкциями. Наборы данных для каждого типа страниц детально описаны в отдельных руководствах для расширений. Помимо [[#модули|модулей]], у которых для каждого из типов страниц закреплен свой шаблон, свои отдельные шаблоны имеют и [[#блоки|блоки]], которые в зависимости от логики представления внедряются в основные шаблоны страниц.