Создание кастомных шаблонов в теме Drupal 7

В одном из проектов потребовалось создать свои шаблоны темы Drupal 7 для некоторых страниц. Например, в Drupal 7 нет кастомного шаблона для 404 ошибки (что-то типа page--404.tpl.php). Если нужно задать разметку страницы (page.tpl.php) для всех нод одного типа (например у всех нод одного типа убрать заголовки страниц), то нужно самому добавить в тему такие шаблоны.

Все это делается в файле темы template.php. Здесь в хуке THEME_preprocess_page (вместо THEME - название Вашей темы) пишется следующая конструкция:

function THEME_preprocess_page(&$variables, $hook)
{
    // Для ноды типа 'portfolio' задаёт свой шаблон страницы page.tpl.php
    if (isset($variables['node']) && $variables['node']->type == 'portfolio')
    {
        $variables['theme_hook_suggestions'][] = 'page__portfolio';
    }

    // Шаблоны для 404 и 403 ошибок
    $status = drupal_get_http_header("status");  
    if($status == "404 Not Found") {      
        $variables['theme_hook_suggestions'][] = 'page__404';
    }

    if($status == "403 Forbidden") {      
        $variables['theme_hook_suggestions'][] = 'page__403';
    }
}

Всё! Теперь можно создавать файлы шаблонов page--portfolio.tpl.php, page--404.tpl.php и page--403.tpl.php в теме и изменять разметку для этих страниц.

Про стандартные файлы шаблонов Drupal 7 вы можете почитать в следующих темах: