Основной алгоритм вывода страниц
Для реализации движка нашей CMS лучше всего написать один «центральный» скрипт, который будет заниматься выводом всех страниц. Все необходимые функции можно вынести в отдельные файлы и подгружать их при выполнении. Вообще отходить от этой схемы нужно только в очень сложных проектах с большим количеством разнообразных функций, когда уложить все вариации алгоритма в один скрипт становится слишком трудно. В случае использования псевдостатических URL (ЧПУ) намного проще строить правила преобразования для одного скрипта. Подключать разнообразные плагины по такой схеме тоже несложно, но тема плагинов еще впереди.
В дальнейшем движок будет работать с преобразованными ссылками в меню. Поэтому прежде всего нам нужно определить минимум параметров, которые потребуются скрипту для определения запрошенной страницы. Первый из них – идентификатор раздела (алиас), он будет использоваться как имя html-файла в статических ссылках. Назовем его id и пока что ограничимся им одним. Значит, вызов любого раздела для скрипта будет иметь вид main.php?id=alias. При разработке плагинов нам могут потребоваться дополнительные параметры. Но их будет получать тот же самый скрипт, поэтому с дополнением правил преобразования URL проблем не возникнет.
Прежде всего скрипт должен считать файл со структурой сайта и преобразовать его содержимое в ассоциативный массив, удобный для дальнейшей обработки. Каждая строка файла содержит набор характеристик одного раздела, поэтому у нас получится массив, каждый элемент которого также является массивом и описывает один раздел сайта. Из этого массива можно выбрать идентификатор текущего раздела и всю информацию для формирования главного меню и меню раздела. По идентификатору скрипт устанавливает имя файла, где хранится контент. Теперь нужно считать и разобрать файл контента, собрать строки меню, вставить все эти данные в нужные места шаблона – и страница сформирована. Остается отослать ее. Вот и все основные функции движка.
Но кроме основных функций главный скрипт должен выполнить еще и обработку ошибок. В отличие от статического сайта движок должен проверять корректность запрошенного URI. Возможен ввод лишних (несуществующих) параметров. Возможен формально корректный ввод, но с обращением к несуществующему алиасу раздела. В обоих случаях скрипт должен отправить в ответ HTTP-заголовок со статусом "404 Not Found" и страницу с сообщением об ошибке.