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 | |