Не всегда генерацию страниц можно ограничить списком алиасов или каталогом. Иногда требуется нечто большее, чем встроенная автоматизация в CMS. Тогда на помощь приходит Drupal API. Речь пойдёт о том, как же с его помощью сгенерировать страницу с нужными параметрами программно.
Для этого мы научимся писать собственные модули для Drupal с преферансом и куртизанками!
Начнем с написания структуры модуля. В папке sites/all/modules создадим папку с именем, которое будет нести наш модуль в системе. Пусть это будет «mymod». Теперь внутри нее создадим два базовых файла, без которых не будет работать ни один модуль в Drupal: mymod.info и mymod.module. Первый — это техническое описание, второй — непосредственно код модуля.
Содержимое файла info будет примерно таким:
name = "mymod" description = модуль свободной генерации страничек core = 7.x version = 7.x-0.1 files[] = mymod.module package = mymod
В общем-то, тут все понятно, а потому перейдём к файлу module. Он содержит обычный PHP код.
Для генерации страницы мы будем использовать функцию Drupal API hook_menu(). Он не только создаст новую страничку, но и сгенерирует для нее сслыку в навигационном меню!
Как же это всё работает. Создадим «hello,world»-страничку:
function mymod_menu() {
$items['staticpage'] = array(
'title' => 'Test static page',
'access callback' => TRUE,
'page callback' => 'mymod_callback',
'type' => MENU_CALLBACK,
);
}
Разберемся в написанном. Как нетрудно увидеть, все параметры страницы хранятся в массиве items. По ключу staticpage создается страница с адресом site.ru/staticpage. У нее будет title «Test static page», к ней можно будет установить права доступа, её содержимое будет генерироваться с помощью функции mymod_callback, а в меню не будет создаваться ссылка на нашу страничку. Также, элемент с ключом type может принимать значения:
MENU_NORMAL_ITEM — обычный элемент меню;
MENU_SUGGESTED_ITEM — пункт меню, с подтверждения администратора;
MENU_LOCAL_ACTION — локальное действие;
MENU_LOCAL_TASK — локальная задача;
MENU_DEFAULT_LOCAL_TASK — локальная задача по умолчанию;
Теперь опишем функцию генерации контента
function mymod_callback() {
return t('Hello, World!');
}
Здесь мы использовали встроенную функцию t(), которая отвечает за автоматический вывод текста на английском языке.
В итоге, по адресу site.ru/staticpage будет создана страница с содержимым «Hello, World!».
ЗАМЕЧАНИЕ: при каждом обновлении модуля не забывайте чистить кэш Drupal здесь admin/config/development/performance.
Но хук меню позволяет создавать не только статические адреса, но и адреса по маске. Например, мы хотим создать динамические страницы с адресами типа staticpage/1, /2 и т.д. Для этого в адресе используем вызов маски:
function mymod_menu() {
$items['staticpage/%'] = array(
'title' => 'Test static page',
'access callback' => TRUE,
'page callback' => 'mymod_callback',
'type' => MENU_CALLBACK,
);
}
Теперь по любому введенному после слеша выражению будет генерироваться страница. Каким образом? Решать Вам! Вы вправе прописать отдельные правила генерации для каждой маски!
Полное описание возможностей hook_menu() можно найти здесь.
Безошибочного Вам кода!