ertttert
Books-CMS.clan.su

Система меню

Система меню 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.

Отображение URL-адресов на функции

Общий подход таков: Drupal запрашивает у всех активированных модулей предоставления массива элементов меню. Каждый элемент меню содержит массив, индексированный путем и содержащий информацию о пути. Один из фрагментов информации, который должен предоставить модуль — это обратный вызов страницы (page callback). В данном контексте это просто имя PHP-функции, которая будет выполнена при запросе браузером определенного пути. При поступлении запроса Drupal выполняет следующие шаги.

  1. Установка пути Drupal. Если путь является псевдонимом реального пути, Drupal определяет этот реальный путь и использует его. Предположим, что администратор присвоил пути http://example.com/?q=node/3 псевдоним http://example.com/?q=about (например, с помощью модуля пути), тогда Drupal использует в качестве пути node/3.
  2. Drupal отслеживает соответствие путей и обратных вызовов в таблице базы данных menu_router и отслеживает элементы меню, которые являются ссылками, в таблице menu_links. Выполняется проверка необходимости перестройки таблиц menu_router и menu_links, хотя это требуется редко — после инсталляции или обновления Drupal.
  3. Определяется, какой элемент таблицы menu_router соответствует пути Drupal, и создается элемент маршрутизатора, описывающий обратный вызов, который необходимо выполнить.
  4. Загружаются все необходимые объекты, которые нужно передать обратному вызову.
  5. Выполняется проверка, разрешен ли пользователю доступ к обратному вызову. Если нет, возвращается сообщение “Access denied” (Доступ запрещен).
  6. Выполняется локализация заголовка и описания элемента меню для текущего языка.
  7. Загружаются все необходимые включаемые файлы.
  8. Выполняется обратный вызов и возвращается результат, который index.php передает через функцию theme_page(), что и дает окончательную веб-страницу.

Визуальное представление этого процесса показано на рис. 4.1 и 4.2.

Всего комментариев: 0
Имя *:
Email *:
Код *:


Бесплатный конструктор сайтов - uCoz