Шаблоны Drupal 6 Page в зависимости от типа узла - PullRequest
0 голосов
/ 09 февраля 2011

Я пытаюсь настроить тему узла на основе типа контента. Здесь я попытался следовать инструкциям, как в http://drupal.org/node/249726.

Что я сделал, скопировал файл node.tpl.php в каталог моей темы. Переименовал его в page-node-mycontenttype.tpl.php и написал функцию предварительной обработки в моем файле шаблона, как показано в ссылке выше.

Очевидно, что он отображает только содержимое узла, но не общие элементы макета (HTML) (логотип, верхний и нижний колонтитулы, боковые панели и т. Д., Что определено в page.tpl.php).

Поэтому необходимо ли мне снова определить те же самые общие элементы макета (HTML) (которые определены в page.tpl.php) в page-node-mycontenttype.tpl.php?

Если так, то мне нужно управлять 2 файлами шаблонов. Любые изменения HTML необходимо выполнить дважды в обоих файлах шаблона.

Есть ли лучший способ, чтобы общий файл шаблона макета ссылался как на тип контента страницы, так и на узел, только средняя область контента получается из двух разных файлов (тип контента страницы или узла)?

Не могли бы вы предложить общую практику и способ достижения этого?

Примечание: Убедитесь, что для переопределения файла шаблона узла по отношению к типу содержимого в вашей теме должны быть оба файла шаблона: файл node.tpl.php и файл node- [content_type] .tpl.php. каталог.

Ответы [ 2 ]

4 голосов
/ 10 февраля 2011

t-dub прав насчет node-contenttypename.tpl.php.

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

  1. Вы можете использовать модуль под названием секции, а затем создать тему для каждого из различных типов контента.

OR

  1. Вы можете добавить следующую функцию в template.php вашей темы:
function templatename_preprocess_page(&$vars) {
  // Template change based on node->type
  if (isset($vars['node'])) {
    // Add template naming suggestion. It should alway use hyphens.
    $vars['template_files'][] = 'page-'. str_replace('_', '-', $vars['node']->type);
  }
}

Просто замените имя шаблона (в имени функции) на имя вашего шаблона. Затем вы можете создать page-contenttypename.tpl.php для уникального дизайна для узлов этого типа контента.

Я использовал разделы в прошлом, но я предпочитаю использовать метод, описанный в # 2, потому что он кажется более дружественным. Его также намного проще поддерживать.

Надеюсь, это кому-нибудь поможет!

4 голосов
/ 09 февраля 2011

Файл, который вы ищете, это node-mycontenttype.tpl.php. Вам нужен шаблон node , а не шаблон page . Если вы переименуете страницу-узел-mycontenttype.tpl.php в узел-mycontenttype.tpl.php, вы получите ожидаемый результат.

Шаблон страницы (page.tpl.php) в Drupal определяет общую разметку и место, где будет выводиться содержимое различных областей. Традиционно он включает в себя логотип, меню, сообщение нижнего колонтитула и несколько других статических элементов. Система тем Drupal позволяет вам переопределить весь шаблон страницы для определенного типа узла (что вы и сделали), но, основываясь на вашем объяснении, вы действительно пытаетесь просто переопределить шаблон узел .

Дополнительная информация: Объяснение и схема того, какие файлы управляют какими частями вывода: http://drupal.org/node/171194 Общая документация по переопределению вывода в системе тем: http://drupal.org/node/341628

При чтении вышеизложенного обязательно обратите внимание на версию Drupal, к которой он относится (в верхней части каждой страницы есть тег). Ситуация довольно резко изменилась между 5 и 6 и снова изменилась (хотя и не так сильно) между 6 и 7.

...