ertttert
Разумеется, полезно знать в общих чертах, что происходит, когда Drupal получает запрос; поэтому в данном разделе приводится краткий обзор на эту тему. Если вы хотите убедиться в этом самостоятельно, воспользуйтесь хорошим отладчиком и начните со страницы index.php — именно на ней Drupal получает основную часть запросов. Последовательность действий, описанная в этом разделе, может показаться слишком сложной для отображения простой веб-страницы, но зато она гибкая.
Drupal выполняется на веб-сервере, которым обычно является Apache. Если веб-сервер корректно обрабатывает файл .htaccess системы Drupal, то он инициализирует некоторые параметры PHP и анализирует URL. Почти все вызовы Drupal выполняются через страницу index.php. Например, обращение к http://example.com/foo/bar приводит к выполнению следующего процесса.
В результате этого процесса Drupal трактует адреса http://example.com/index.php?q=foo/bar и http://example.com/foo/bar одинаково, поскольку в обоих случаях внутренний путь один и тот же. Это позволяет Drupal использовать URL без экзотических символов внутри. Такие URL-адреса называются чистыми.
При установке Drupal на веб-серверах других типов, таких как Microsoft IIS, чистые URL могут быть получены с помощью модуля ISAPI (Internet Server Application Programming Interface — интерфейс прикладного программирования Интернет-сервера) Windows, такого как ISAPI_Rewrite. Сервер IIS 7 и последующие его версии поддерживают перезапись непосредственно. Если сайт работает под управлением IIS 7 или более поздней версии, необходимо исключить файл web.config, который разрешает использование чистых URL и защищает от посторонних глаз файлы, которые лучше им не просматривать, например, .install, .module, .test, .theme, .profile, .info и .inc.
Drupal загружает себя при каждом запросе, проходя ряд этапов раскрутки. Эти этапы определены в файле bootstrap.inc и выполняются так, как описано в табл. 1.1.
Таблица 1.1. Процесс загрузки
Этап | Назначение |
Конфигурирование | Задает глобальные переменные, которые используются в процессе загрузки |
СУБД | Инициализирует СУБД и регистрирует функции автозагрузки |
Переменные | Загружает системные переменные и все разрешенные модули раскрутки |
Сеанс | Инициализирует обработку сеансов |
Заголовок страницы | Вызывает метод hook_boot(), инициализирует систему блокировки и посылает стандартные HTTP-заголовки |
Язык | Инициализирует все определенные языковые типы |
Завершение | Последний этап: к этому моменту система Drupal полностью загружена. Здесь проверяются и исправляются входные данные |
Конфигурирование Задает глобальные переменные, которые используются в процессе загрузки СУБД Инициализирует СУБД и регистрирует функции автозагрузки Переменные Загружает системные переменные и все разрешенные модули раскрутки Сеанс Инициализирует обработку сеансов Заголовок страницы Вызывает метод hook_boot(), инициализирует систему блокировки и посылает стандартные HTTP-заголовки Язык Инициализирует все определенные языковые типы Завершение Последний этап: к этому моменту система Drupal полностью загружена. Здесь проверяются и исправляются входные данные
Все действия по обработке и сбору данных, необходимых для удовлетворения запроса, выполняются функцией обратного вызова. Например, если получен запрос контента наподобие http://example.com/q=node/3, такой URL отображается на функцию node_page_view() в модуле node.module. При дальнейшей обработке данные для этой ноды извлекаются из базы и помещаются в структуру данных. После этого приходит время темизации.
Темизация (theming, или оформление посредством выбранной темы) выполняет преобразование выбранных, измененных или созданных данных в формат HTML (либо XML или другой выходной формат). Drupal использует выбранную администратором тему для придания странице нужного внешнего вида. Затем результирующий вывод отправляется веб-браузеру (или другому HTTP-клиенту).
Всего комментариев: 0 | |