xandeadx.ru Блог музицирующего веб-девелопера

Drupal → Различные page.tpl.php в зависимости от условий

Опубликовано в

Иногда необходимо, чтобы некоторые страницы имели свой уникальный основной шаблон (layout, он же page.tpl.php).

Самый простой способ добиться этого, это создать в папке темы файл с именем на основе url. Например при генерации страницы mysite.ru/search Drupal будет искать в папке темы файл с именем page--search.tpl.php и если он существует, то будет использовать его, вместо стандартного. По такому принципу можно создавать свои layout-ы для определённых нод (например page--node--223.tpl.php для темизации страницы mysite.ru/node/223) или терминов таксономии (page--taxonomy--term--85.tpl.php для темизации страницы mysite.ru/taxonomy/term/85). Подробнее в официальном руководстве.

Но что делать если основной шаблон нужно использовать больше одного раза, и в зависимости от каких-нибудь условий, например для нод с nid равным 1 или 99.

На помощь приходит функция предварительной обработки страницы. В template.php добавляем:

/**
 * Preprocess vars for page.tpl.php.
 */
function THEMENAME_preprocess_page(&$vars) {
  // page-someword.tpl.php для нод с nid равным 1 или 99
  if (isset($vars['node']) && in_array($vars['node']->nid, array(1, 99))) {
    $vars['theme_hook_suggestions'][] = 'page__someword';
  }
}

Дальше в папке темы создаём файл page--someword.tpl.php, очищаем кэш, и смотрим результат.

Написанное актуально для Drupal 7
Похожие записи

Комментарии RSS

Почему-то сниппет при вставке в template.php выдает ошибку Fatal error: Cannot redeclare phptemplate_preprocess_page()... Был бы ОЧЕНЬ признателен за помощь в решении проблемы

у вас два раза определена функция phptemplate_preprocess_page, одну нужно удалить, либо обе совместить в одну

ОГРОМНОЕ СПАСИБО! Совместил, все получилось!

А если есть необходимость вывести по типу ноды - что нужно переделать в вашем коде?

вместо nid проверять тип ноды $vars['node']->type

Спасибо.

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании