Отдельный шаблон страницы для разных типов нод в Drupal 7

Аватар пользователя bedstvie bedstvie 4 марта 2011 в 18:25

Вожусь с созданием отдельного шаблона страницы для разных типов ноды. Под шестёрку это делалось так. А как такое реализовать в седьмом?

Комментарии

Аватар пользователя bedstvie bedstvie 4 марта 2011 в 18:59

"Stan.Ezersky" wrote:
к примеру так: node--book.tpl.php, node--blog.tpl.php

Спасибо за ответ, но этими шаблонами мы темизируем сам контент ноды, а мне нужно перекрыть шаблон page.tpl.php для конкретного типа ноды.

Аватар пользователя bedstvie bedstvie 4 марта 2011 в 19:19

Спасибо Stan.Ezersky.

"Stan.Ezersky" wrote:
Тогда вам сюда: http://drupal.org/node/1035656[/quote]
То что нужно. Решено.

function mytheme_preprocess_page(&$variables, $hook) {
   //some other stuff
if (isset($variables['node'])) {
    $variables['theme_hook_suggestions'][] = 'page__type__'. $variables['node']->type;
    $variables['theme_hook_suggestions'][] = "page__node__" . $variables['node']->nid;
  }
}

Шаблоны должны называтся page--type--мой_тип.tpl.php и для конкретной ноды page--node--конкретный_ид.tpl.php

Аватар пользователя rampage rampage 15 марта 2011 в 19:00

Странно, но почему-то у меня не работает.

D7, Тема corolla.

template.php:

<?phpfunction corolla_preprocess_page(&$variables, $hook) {  
  if (isset($variables['node'])) { 
    $variables['theme_hook_suggestions'][] = 'page__type__'.$variables['node']->type;
    $variables['theme_hook_suggestions'][] = 'page__node__'.$variables['node']->nid;
  }
}?>

page--node--15.tpl.php:

<?php print $content ?>
Аватар пользователя int_scorpio int_scorpio 12 июля 2011 в 11:20

SplasH wrote:
Потому что надо не page--node--15.tpl.php а page__node__15.tpl.php

Да не, чувак, в моем случае тоже только page--node--15.tpl.php срабатывает.

Аватар пользователя elf39 elf39 10 августа 2011 в 13:06

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

Все разобрался, в коде mytheme не изменил на свое, а файл должен быть page--type--типноды.tpl.php

Аватар пользователя Neverbalnost Neverbalnost 10 февраля 2012 в 19:40

Не забывайте кэш сбрасывать, друзья мои. Час ковыряла бедные шаблоны пока не поняла это.

Аватар пользователя connectoid connectoid 3 апреля 2012 в 2:33

С созданием отдельного шаблона для конкретной ноды или типа ноды понятно, а можно ли как-то темизировать саму страницу на которой выводятся ноды определенного типа?
Например есть ссылка меню с адресом термина таксономии (taxonomy/term/1) которая отображает список нод одного типа. Как применить свой шаблон к этой странице?

Аватар пользователя yurant yurant 2 декабря 2012 в 23:13

господа форумчане... тема актуальна, я вот тоже не могу добиться желаемого...
в www\themes\bartik\template.php:

<?php
function bartik_preprocess_page(&$variables$hook) {
     if (isset(
$variables['node'])) {  
    
$variables['theme_hook_suggestions'][] = 'page__type__'$variables['node']->type;
    
$variables['theme_hook_suggestions'][] = "page__node__" $variables['node']->nid;
  }
}
?>

есть страницы типа "sell", тип определяется корректно, проверил (в вышенаписанный скрипт добавлял вывод типа страницы... выводилось.)
файл "www\themes\bartik\templates\page--type--sell.tpl.php". Если содержимое файла:

.field-name-field-photo
{
 float: left;
 clear: left;
}

.field-name-body
{
 float: right;
 clear: right;
 width: 450px;
 text-align: left;
}

то собственно все это и выводится вместо ноды.
если же данное обрамить в <style type="text/css"></style>
страница выводится абсолютно пустая.
поясните где и чего я недопонимаю...

Аватар пользователя karatenkov karatenkov 1 мая 2013 в 11:25

Есть файл типа node--add--apps.tpl.php, какой будет правильный код для переопределения шаблона в template.php для страницы добавления материалов? Второй день маюсь, никак не получается

Аватар пользователя brussnika brussnika 25 февраля 2014 в 17:48

Вот так работает на паре сайтов - а на третьем нет:

function thistheme_preprocess_page(&$variables) {
  if (isset($variables['node']) && $variables['node']->type) {
        $variables['template_files'][] = 'page--node-partners_page' . $variables['node']->type;
  }
}

При этом имя файла: page--node--partners_page.tpl

Сейчас мне нужно присвоить свой шаблон для всех страниц типа services (не нод, а страниц). Тип материала services создан.
Вышеприведенное перекрытие работает для чего угодно (тип ноды, отдельная страница), только не для страницы типа ноды.

Ничего не поменялось случайно? Или где я косячу?