Шаблоны страниц в зависимости от типа материала Drupal

Шаблоны страниц в зависимости от типа материала Drupal

В движке оформления phptemplate CMS Drupal существуют богатые возможности управления формированием верстки и оформления страниц. Шаблоны оформления (файлы *.tpl.php) определяют каким образом будут выглядеть страницы, материалы, блоки, комментарии и многое другое. Можно создать отлельное оформление для каждой страницы по её адресу. Например:

  • page-front.tlp.php - оформление главной страницы, вне зависимости от её истинного адреса.
  • page-node-40.tpl.php - оформление страницы по адресу http://адрес_сайта/node/40 следует отметить, что даже при использовании модуля path следует указывать системные адреса страниц, а не синонимы.

Также гибко и формирование разметки типов содержимого, кроме основного шаблона node.tpl.php, можно создавать шаблон оформления для каждого типа содержимого. Например: node-story.tpl.php будет вызываться при формировании разметки заметок (story - машинное название).

При создании сайта может возникнуть ситуация когда необходимо менять оформление страницы, в зависимости от типа отображаемого содержимого. В этом случае придется немного попрограммировать. В папке с темой оформления нужно создать файл template.php и добавить в него следующую функцию:

<?php
// Add additional template suggestions
function phptemplate_preprocess_page($vars) {
// Add page template suggestions based on node type, if we aren't editing the node.
if ($vars['node'] && arg(2) != 'edit') {
$vars['template_files'][] = 'page-nodetype-'. $vars['node']->type;
}
return $vars;
}
?>

Данная функция новинка для Drupal 6.x, система предложений шаблонов (template suggestion) открывает множество дополнительных возможностей. В данном случае, движку phptemplate предлагается использовать файлы page-nodetype-название_материала.tpl.php для оформления страницы с соответствующим материалом, кроме случая страницы редактирования.

Если вы используете Drupal более ранней версии, то можно использовать следующий код:

<?php
// Add additional template suggestions
function _phptemplate_variables($hook, $vars) {
switch ($hook) {
case 'page':
// Add page template suggestions based on node type, if we aren't editing the node.
if ($vars['node'] && arg(2) != 'edit') {
$vars['template_files'][] = 'page-nodetype-'. $vars['node']->type;
}
break;
}
return $vars;
}
?>

Теперь можно создавать шаблоны оформления страниц по типу отображаемого содержимого. Например: page-nodetype-story.tpl.php

После добавления новых файлов шаблонов, необходимо очистить кэш системы по адресу /admin/settings/performance, нажав на кнопочку в самом низу страницы. Только после этого изменения вступят в силу.

вернуться назад

Комментарии

Переопределение шаблонов

Воспользовался вашим решением и решением с оф. сайта - у них есть проблемы, какое не используй. После вставки рекомендуемого кода с оф. сайта (или вашего) для перебивки страниц типов материала почему-то друпал перестаёт перехватывать шаблоны отдельно взятых страниц (обсуждается тут: http://www.drupal.ru/node/104535). В связи с этим вопрос: как сделать возможность переопределять страницы ноды по типам материалов, при это не сделав так, чтобы друпал перестал перехватывать шаблоны страниц для простых отдельно взятых нод (вида pag-node-nid.tpl.php)?