Початкова сторінка

Микола Жарких (Київ)

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

?

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

Розглянемо, що робить Смерека, коли від клієнта надходить запит сторінки.

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. Відсилає сторінку клієнту.

Розуміння послідовності генерації сторінки мусить допомогти програмісту керувати цим процесом.