ertttert
Система меню Drupal является сложной, зато мощной. Можно считать, что она отвечает за три основные функции: отображение обратных вызовов, управление доступом и настройка меню. Код самой системы меню находится в файле includes/ menu.inc
, а дополнительный код с такими средствами, как настройка меню, расположен в modules/menu
. В настоящей главе мы рассмотрим, что такое отображение обратных вызовов и как оно работает, узнаем, как защитить элементы меню с помощью управления доступом, научимся использовать в меню обобщенные символы и рассмотрим различные встроенные типы элементов меню. В конце главы будет показано, как переопределять, добавлять и удалять существующие элементы меню, чтобы сделать Drupal как можно более ненавязчивым.
Когда веб-браузер отправляет запрос к Drupal, он предоставляет некоторый URL-адрес. Исходя из этой информации, Drupal может определить, какой код необходимо выполнить и как обработать запрос. Весь этот процесс обычно называется маршрутизацией
(routing) или диспетчеризацией
(dispatching). Drupal усекает базовую часть URL и использует последнюю его часть, которая называется путем
(path). Например, для URL-адреса http://example.com/?q=node/3
путь Drupal имеет вид node/3
. При использовании средства чистых URL адресом в браузере будет http://example.com/node/3
, но веб-сервер молча переписывает URL в виде http://example.com/?q=node/3
, поэтому Drupal всегда работает с одинаковым путем. В предыдущем примере путь Drupal имеет вид node/3
независимо от того, включено ли средство чистых URL. Этот механизм описан в разделе “Роль веб-сервера” главы 1.
Общий подход таков: Drupal запрашивает у всех активированных модулей предоставления массива элементов меню. Каждый элемент меню содержит массив, индексированный путем и содержащий информацию о пути. Один из фрагментов информации, который должен предоставить модуль — это обратный вызов страницы (page callback). В данном контексте это просто имя PHP-функции, которая будет выполнена при запросе браузером определенного пути. При поступлении запроса Drupal выполняет следующие шаги.
http://example.com/?q=node/3
псевдоним http://example.com/?q=about
(например, с помощью модуля пути), тогда Drupal использует в качестве пути node/3
.menu_router
и отслеживает элементы меню, которые являются ссылками, в таблице menu_links
. Выполняется проверка необходимости перестройки таблиц menu_router
и menu_links
, хотя это требуется редко — после инсталляции или обновления Drupal.menu_router
соответствует пути Drupal, и создается элемент маршрутизатора, описывающий обратный вызов, который необходимо выполнить.“Access denied”
(Доступ запрещен).index.php
передает через функцию theme_page()
, что и дает окончательную веб-страницу.Визуальное представление этого процесса показано на рис. 4.1 и 4.2.
Всего комментариев: 0 | |