Начальная страница

Николай Жарких (Киев)

Персональный сайт

?

Алгоритм генерации страниц

Рассмотрим, что делает Смерека, когда от клиента поступает запрос страницы.

1. Загружается файл customsettings.php и все указанные там параметры вступают в действие. Этот файл по умолчанию находится в том же каталоге, что и файл index.php, поэтому несколько сайтов могут одновременно использовать один базовый код Смереки и применять собственные настройки.

2. Загружается основной файл Смереки, который так и называется – main.php. Он делает следующее:

2.1. Устанавливает соединение с базой данных, которое будет использоваться до конца работы программы.

2.2. Проверяет, не задан входной параметр Cmd=Redirect; если задан – происходит перенаправление и обработка на этом заканчивается.

2.3. Активирует сеанс PHP.

2.4. Проверяет, не задан входной параметр Cmd=Logout; если задан, сохраненный в сеансе объект «Пользователь» удаляется; удаляются также некоторые другие сохранены в сеансе объекты.

2.5. Проверяет, есть ли в текущем сеансе объект «Пользователь»; если нет – создает новый объект «Пользователь» с правами анонимного пользователя (которому разрешен просмотр общедоступных страниц).

2.6. Определяет язык отображения страницы; если заданный входным параметром Lang язык не принадлежит к числу языков сайта, отображается сообщение об ошибке; если входной параметр Lang не задан, устанавливается язык по умолчанию.

2.7. Проверяет, не задан входной параметр Cmd=Error; если задан – отображается страница с сообщением об ошибке, заданную входным параметром SubCmd.

2.8. Проверяет, есть возможность применить Смерекеш; если есть – делается попытка отправить пользователю смерекешированную страницу; если же применение Смерекеша невозможно, или страницы нет в кэше, или она устарела – выполнение продолжается.

2.9. Определяет ид вершины: либо из входного параметра Node, либо путем разбора входного параметра Path; если эти параметры не заданы – выбирается корневая вершина домена.

2.10. Передает управление модулю dispatch.php, который обеспечивает выполнение большинства команд, адресованных Смереке.

2.11. Результатом работы этого модуля может быть ошибка (отображается страница с сообщением), новая вершина (она заменяет вершину, определенную в п. 2.9 – внутренний редирект Смереки); новый адрес – выполняется внешний http редирект, или продолжается генерация (например, если никакая команда вообще не задана).

2.12. Загружается из базы данных целевая вершина, при этом анализируется атрибут class и полиморфный конструктор создает в памяти объект PHP, определенный метакласом для данного класса вершины. Далее загружаются все языково-нейтральные атрибуты вершины и те языково-зависимые атрибуты, соответствующие заданному языку.

2.13. Загружается модуль page.php и управление передается полиморфному конструктору страниц Смереки.

3. Модуль page.php делает следующее:

3.1. Проверяет права доступа пользователя к данной вершине; если пользователь не имеет права ее видеть, отображается сообщение об ошибке.

3.2. Проверяет, не задан входной параметр Cmd=Edit; если задан – отображает страницу в режиме редактирования (принципиально выполняются те же операции, что и в режиме просмотра, но с использованием шаблона редактора). Мы рассмотрим режим просмотра.

3.3. Выполняет разыменование ссылок и коллекционирование атрибутов заданной вершины.

3.4. Определяет шаблон страницы на основании атрибута Template.

3.5. Вызывает полиморфный конструктор страниц, который создает в памяти объект PHP «Страница», определенный меташаблоном для данного шаблона. Если меташаблон имеет атрибут link, указывающий на шаблон-предок – выполняется компиляция шаблонов.

3.6. Выполняет компиляцию страницы, которая заключается в последовательном поиске всех смеретегов, присутствующих в шаблоне, и вычислении их в контексте текущей вершины. Результат вычислений подставляется вместо смеретега в HTML код страницы. Результатом вычисления смеретега может быть HTML код, который вновь содержит какие-то смеретеги; поэтому процесс компиляции повторяется циклически до исчерпания всех смеретегов. Чтобы предотвратить возможное зацикливание (например, если результатом вычисления смеретега есть код того же смеретега), цикл принудительно прерывается после определенного числа проходов.

3.7. Пытается сохранить скомпилированный HTML код страницы в Смерекеше для дальнейшего использования.

3.8. Обновляет число загрузок страницы.

3.9. Выполняет пост-обработку страницы.

3.10. Отсылает страницу клиенту.

Понимание последовательности генерации страницы должно помочь программисту управлять этим процессом.