Не всегда генерацию страниц можно ограничить списком алиасов или каталогом. Иногда требуется нечто большее, чем встроенная автоматизация в 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() можно найти здесь.

Безошибочного Вам кода!