it-roy-ru.com

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

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

  1. page--article.tpl.php
  2. page--node--article.tpl.php
  3. page--node--type--article.tpl.php
  4. page--node-type--article.tpl.php
  5. page--type--article.tpl.php

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

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

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

15
Rahul Prasad

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

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;
  }
}
?>
19
BeWhy

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

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

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

4
anotherdave

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

узел - recipe.tpl.php

не

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

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

3
mikeDOTexe

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

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

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

  1. страница - тип контента, name.tpl.php

позволит вам тему шаблона типа контента.

1
Ezra

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

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

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

function <strong>YOUR_THEME_NAME_HERE</strong>_preprocess_page(&$variables) {
  if (isset($variables['node']->type)) {
    // If the content type's 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

0
Arul M joseph

Поэтому, в зависимости от того, чего вы пытаетесь достичь, могут быть некоторые хитрости CSS, которые могут вам помочь.

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

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

body.node-type-article #selector {}
0
bitfed

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

узел - contenttype . tpl

0
Purplemonkey

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

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

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

Ваш шаблон для статей будет:

узел - article.tpl.php

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

0
chadpeppers