Добавить страницу

1-ый способ: Переопределить вывод ноды

В папке шаблона есть файл node.tpl.php, который отвечает за содержимое всех нод.

Для любой ноды можно создать свой файл. Например, если у ноды ИД равен 14, то его содержимое будет выводиться из файла node--14.tpl.php, если такой файл существует.

Также можно указать содержимое нод для определённых типов данных (Content Types), создав файл node--type.tpl.php.

Также можно указать шаблон ноды по определённым условиям:

# template.php
function THEME_preprocess_node(&$variables) {

    if (current_path() == 'node/1' || current_path() == 'node/2') {
        $variables['theme_hook_suggestions'][] = 'page__custom'; // page--custom.tpl.php
    }

}

После создания новых файлов в шаблоне, необходимо обновить кэш Drupal.

2-ой способ: Файл

Создать файл /sites/all/themes/mytemplate/page--mypage.tpl.php. Теперь этот файл можно открыть по адресу: http://example.com/mypage.

3-ий способ: Модуль

За создание страницы через модуль отвечает hook_menu().

Данный хук позволяет создавать как отдельные страницы, так и страницы настроек модуля и содержимое во вкладках.

Пример создания страниц:

// создание трёх страниц
function mymodule_menu() {
    $items['mypage']       = array();
    $items['second-page']  = array();
    $items['path/to/page'] = array();
 
    return $items;
}

После обновления кэша эти три страницы будут доступны по адресу, например http://example.com/mypage. Но страница откроется как недоступная, т.к. для них не прописаны настройки.

Чтобы страница стала доступной, надо написать следующее:

// создание страницы «mypage»
function mymodule_menu() { 
    $items['mypage'] = array(
        'title'            => 'Имя страницы',
        'page callback'    => 'show_page', // функция, выполняемая при вызове данной страницы
        'page arguments'   => array('HTML-контент для страницы'),
        'access arguments' => array('access content'), // публичный доступ
        'type'             => MENU_NORMAL_ITEM,
    );
 
    return $items;
}
 
function show_page($content) {
    return $content;
}

Значение MENU_NORMAL_ITEM указывает, что в главном меню сайта надо добавить пункт меню на новую страницу. Также можно указать параметр MENU_CALLBACK, если пункт меню создавать не надо.

Можно также передавать аргументы:

$items['mypage/%'] = array( // вместо % в URL может быть любой текст или число
    'title'            => 'Имя страницы',
    'page callback'    => 'show_page',
    'page arguments'   => array(1), // 1 означает передавать вторую часть URL, т.е. %
    'access arguments' => array('access content'),
    'type'             => MENU_CALLBACK,
);