Понять архитектуру PHPC будет несложно хотя бы уже потому, что этот движок очень компактен − в нем меньше 40 файлов. Здесь нет ни сложной иерархии классов, которую нужно зазубривать наизусть, ни разветвленной структуры каталогов, в которой можно заблудиться. Все просто и интуитивно понятно.
Главную идею PHP Compiler можно выразить так:
"Хороший сайт похож на быструю реку, которая находится в непрерывном движении."
Что это значит?
Это значит, что живой, интересный, качественный веб-проект никогда не замирает в одном состоянии. Сайт постоянно растет, наполняется новыми материалами, его структура постоянно претерпевает изменения − адаптируется и улучшается старое, добавляется новое. Нельзя раз и навсегда продумать и предугадать структуру и содержание вашего будущего сайта. Поэтому хороший движок должен предоставлять удобные инструменты для управления не только содержимым, но и структурой сайта.
Главные носители структуры сайта − это его страницы. Следовательно, хороший движок должен позволять легко и свободно управлять даже такой основополагающей вещью, как страницы вашего сайта. Большинство современных фреймворков не в состоянии обеспечить вам достаточную свободу в управлении страницами, ибо заставляют вас жестко "зашивать" структуру проекта в виде файлов и классов и сохранять их на сервере в таком виде.
PHP Compiler устроен иначе. Он не хранит страницы вашего сайта в виде файлов. Ни в явной форме, когда ссылка ведет прямо на "страничный" файл, ни в неявной, когда для каждой страницы пишется отдельный класс-контроллер, а их подключением и запуском заведует класс-диспетчер. Все это слишком громоздко. Вместо этого PHPC хранит страницы вашего сайта как данные, в таблице. Что это дает:
Это до предела упрощает пополнение сайта новыми разделами и страницами.
Это позволяет удобно управлять структурой вашего сайта прямо из админпанели.
Это позволяет в любой момент окинуть взглядом всю структуру вашего сайта.
Это позволяет избежать превращения программного кода вашего сайта в файлопомойку.
Это позволяет делать более полноценные резервные копии вашего сайта.
Это, как ни странно, ускоряет работу вашего сайта. Выборка данных о странице из таблицы в среднем работает даже быстрее, чем обработка многочисленных роутинг-правил и фильтров с последующим поиском, подключением и запуском скрипта с нужным классом.
Итог: структура сайта, то есть набор его страниц и разделов, является динамической, а не статической сущностью. По сути, страницы сайта − это такие же данные, как новости или комментарии. Следовательно, и хранить их надо, как полноценные данные − в базе данных.
Теперь, когда вы поняли концепцию PHPC, вам не составит труда разобраться и с его основными сущностями.
Поведение любого сайта на PHPC управляется тремя центральными понятиями, или сущностями:
Страницы (таблица pages);
Шаблоны (таблица templates);
Пакеты (таблица bundles).
Каждая сущность хранится в своей таблице, для управления каждой сущностью предусмотрена отдельная закладка в панели управления. Рассмотрим их по отдельности.
Эта сущность отвечает за обработку запросов и отображение страниц вашего сайта. Каждой PHPC-странице, или, другими словами, каждой записи в таблице pages, соответствует либо одна страница вашего сайта, либо целое семейство однотипных страниц.
Важно понимать, что сами по себе PHPC-страницы ничего не отображают на экране. Отображением дизайна и контента занимаются шаблоны, о них чуть позже. PHPC-страница − это лишь набор характеристик, которые подсказывают движку, является ли тот или иной запрос к сайту валидным и как следует реагировать на этот запрос: какие данные выбирать из базы, какой шаблон использовать для их отображения.
PHPC-страницы могут наследоваться друг от друга. Если в свойствах PHPC-страницы указать страницу-предка, то новая PHPC-страница унаследует у страницы-предка все пропущенные атрибуты, а также список дополнительных параметров. Если на вашем сайте есть набор страниц, которые очень похожи друг на друга, и различаются лишь парой нюансов − наследуйте такие страницы от общего предка, и указывайте все однотипные параметры только у предка. Это упростит внесение изменений во все такие страницы в дальнейшем − достаточно будет отредактировать страницу-предка.
При установке движка с нуля, автоматически создаются две PHPC-страницы: index и 404. Первая нужна для отображения главной страницы вашего сайта. Вторая − для обработки ситуации "страница не найдена". Разумеется, вы можете свободно добавлять на сайт новые страницы, например, about/authors или contacts. Новые страницы начнут работать сразу после того, как вы щелкните по кнопке сохранения данных в панели управления.
Шаблоны нужны сайту для двух вещей: для отделения логики от представления и для придания вашему проекту красивого и оригинального внешнего вида. Современные сайты сложны не только в своем внутреннем устройстве, но и в своем оформлении − на одном сайте может быть и фотогалерея, и блог, и библиотека, и форум для общения, и все это нужно стильно оформлять. Поэтому шаблонизатор − очень важная часть современных сайтовых движков.
В PHP Compiler шаблоны, как и страницы, хранятся в базе данных. Каждому шаблону соответствует одна запись в таблице templates. Важно понимать, что PHPC оснащен компилирующим шаблонизатором − неважно, как сильно вы структурируете свои шаблоны и как много вспомогательных шаблонов вы используете для оформления сайта. Перед выполнением все необходимые шаблоны все равно будут собраны в одну мощную, но компактную структуру и закешированы для повторного использования. Поэтому, в отличие от других шаблонизаторов, увеличение количества и сложности шаблонов в PHPC никак не сказывается на производительности сайта.
Как и PHPC-страницы, шаблоны в PHP Compiler могут наследоваться друг от друга. Но у шаблонов этот механизм работает чуть иначе. Он предназначен для заимствования у предков не параметров, а частей содержимого. Подробнее об этом можно прочитать в статье: Наследование шаблонов.
Чтобы связать шаблон с PHPC-страницей, нужно указать название шаблона в параметрах страницы. Один и тот же шаблон может использоваться для отображения нескольких разных страниц.
Перед тем, как выводить в шаблонах динамические данные − например, список последних новостей − эти данные нужно предварительно сформировать. В простейшем случае их нужно выбрать из базы данных. Для хранения кода, отвечающего за подготовку данных, в PHPC предназначены пакеты.
Как и шаблоны, пакеты хранятся в базе данных и ими можно управлять в панели управления, без необходимости что-либо скачивать или закачивать через медленный протокол FTP. Пакет − это просто фрагмент программного кода на языке PHP, ничем не отличающийся от обычного, за исключением того, что в нем нет тегов <?php ... ?>. В пакетах автоматически доступны все наиболее важные переменные и классы движка. Кроме того, все созданные в пакете переменные автоматически захватываются и передаются в шаблон. Таким образом, для того, чтобы вывести на странице ленту новостей, необходимо создать пакет, состоящий из одной-единственной строки:
$news=$database->getOrderedLines("news","date DESC");Чтобы связать вместе пакет и шаблон, нужно указать название пакета в параметрах той же самой PHPC-страницы, с которой связан нужный вам шаблон.
Кроме обычного способа (страница запускает сначала пакет, а затем шаблон), возможны и более экзотические варианты. Например, пакет может самостоятельно запускать шаблон, при помощи метода processTemplate класса Compiler. Также допускается использование PHP-вставок в шаблонах.
Кроме этой троицы (Страницы, Шаблоны и Пакеты), в PHPC используются и другие сущности − Представления ссылок, Подстановки, Стили и так далее. Их детальное изучение можно отложить на потом. Главное на данный момент − разобраться с тем, как страницы, шаблоны и пакеты взаимодействуют друг с другом, что в них можно делать, а что нельзя. Не бойтесь экспериментировать, смело "играйте" с панелью управления. Можете воспользоваться руководством по созданию первого сайта, чтобы пройти весь путь по шагам. Ну а если вы вдруг сделаете что-нибудь не так − просто удалите все таблицы из базы данных вашего пробного сайта. После этого вы сможете установить их повторно в панели управления и начать все с чистого листа.