Drupal 7 Как переопределить page.tpl для определенного типа контента?

Я хотел переопределить page.tpl.php для определенного типа содержимого. Я пробовал это, ничего не работает для меня.

  • page--article.tpl.php
  • page--node--article.tpl.php
  • page--node--type--article.tpl.php
  • page--node-type--article.tpl.php
  • page--type--article.tpl.php

Но когда я нацелился на конкретный node на номер i.e. page--node--8.tpl.php, он работал нормально. Я думаю, что page--article.tpl.php должен был работать, но я не знаю, почему он не работает.

Скажите, пожалуйста, если я назову это неправильно. и как я могу отлаживать такие вещи. Я слышал, что могу использовать модуль Devel, но ничего не знаю об этом. Будет оценен небольшой намек в правильном направлении.

Заранее спасибо

Ответы

Ответ 1

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

http://drupal.org/node/1089656#comment-4426790

<?php
function themeName_preprocess_page(&$vars, $hook) {
  if (isset($vars['node'])) {
    // If the node type is "blog_madness" the template suggestion will be "page--blog-madness.tpl.php".
    $vars['theme_hook_suggestions'][] = 'page__'. $vars['node']->type;
  }
}
?>

Ответ 2

Помните, что вы очистили кеш (в разделе "Администрирование" > "Конфигурация сайта" > "Производительность" ), чтобы Drupal "знал" о вашем новом файле и использует его, а не по умолчанию.

См. здесь Очистка кэшированных данных

Кроме того, вам может потребоваться добавить обработчик предварительной обработки (я сам не использовал D7, всего 5/6 - думаю, это немного изменилось.) Этот пост на Drupal Stack Exchange, кажется, дает более подробную информацию

Ответ 3

Я столкнулся с одной и той же проблемой.

node - recipe.tpl.php

не

страница - recipe.tpl.php

это, конечно, с типом контента, называемым "рецептом".

Ответ 4

ВСЕГДА ОЧИСТИТЕ КЕЙШ...

Перейдите в /admin/config/development/performance и нажмите кнопку очистки кеша. Это должно быть первое, что вы делаете, если вы внесли изменения в структуру бэкэнд, и они не отображаются, как ожидалось.

В противном случае вы почти правы

  • страница - содержание-типа name.tpl.php

позволит вам указать шаблон типа содержимого.

Ответ 5

Я знаю, что это старый вопрос, но если другие приходят сюда, то способ, которым я переопределяю типы контента в drupal 7, похож на этот

node - contenttype.tpl

Ответ 6

Вам потребуется перезаписать конкретный шаблон node для типа контента, если он отличается от базовой. Пожалуйста, проверьте это:

http://api.drupal.org/node/19080

Под этой страницей скопируйте/вставьте элементы, которые находятся на странице node.tpl.php, и перезапишите ее так, как вы хотите. Вы можете получить доступ к node через $node

Ваш шаблон для статей будет выглядеть следующим образом:

node - article.tpl.php

После создания убедитесь, что вы очистили кеш, чтобы убедиться, что это работает.

Ответ 7

Итак, в зависимости от того, что вы пытаетесь выполнить, могут возникнуть некоторые трюки CSS, которые могут вам помочь.

Например, чтобы переопределить любые правила CSS для определенного типа node, просто помните, что ваши страницы для этого типа node будут иметь класс body "node-type-[TYPE]" (то есть: .node-type-article)

Затем вы можете переопределить CSS следующим образом:

body.node-type-article #selector {}

Ответ 8

Шаг 1. Создайте тип содержимого, например: мой тип содержимого - "fullwidthpage"

Шаг 2. Скопируйте page.tpl.php и переименуйте в страницу - fullwidthpage.tpl в папку шаблона.

Шаг 3. Добавьте этот код в template.php

function <strong>YOUR_THEME_NAME_HERE</strong>_preprocess_page(&$variables) {
  if (isset($variables['node']->type)) {
    // If the content type machine name is "my_machine_name" the file
    // name will be "page--my-machine-name.tpl.php".
    $variables['theme_hook_suggestions'][] = 'page__' . $variables['node']->type;
  }
}

Не забывайте менять YOUR_THEME_NAME_HERE