Как я могу настроить определенный узел в Drupal 6, КОГДА пользовательский шаблон уже был применен к типу контента узла? - PullRequest
0 голосов
/ 21 января 2012

[Для Drupal 6] Допустим, я создал тип контента с именем "my_content_type".Я могу переопределить шаблон по умолчанию для всего этого типа содержимого, создав «page-node-my_content_type.tpl.php».Но что было бы лучшим способом для дальнейшей настройки одного узла этого типа контента (например, узел 5555)?

Я пробовал следующее, но ни один не работал:

  • page-node-5555.tpl.php
  • page-node-my_content_theme-5555.tpl.php
  • node-5555.tpl.php

Нет изэти работы.Все они продолжают использовать мой оригинальный шаблон типа контента.

Ответы [ 3 ]

3 голосов
/ 22 января 2012

Шаблоны страниц Drupal работают в системе предложений. На основе текущего URL создается массив возможных файлов шаблонов. Он перебирает массив (в обратном порядке) в поисках существующих файлов шаблонов. Первый найденный, он будет использовать.

Система тем drupal предоставляет вам возможность изменять предложения шаблонов. Откройте файл template.php и найдите

function phptemplate_preprocess_page(&$vars) {

переменная $ vars - это то, что содержит предложения, в частности, $ vars ['template_files']

По умолчанию доступны только те предложения страниц, которые

  • page.tpl.php
  • страница-node.tpl.php
  • страниц node- [node_id] .tpl.php

Насколько мне известно, page-node- [node_type] .tpl.php не работает по умолчанию, поэтому, скорее всего, вы уже изменили шаблон preprocess_page для добавления в эту функцию.

Однако, если вы хотите добавить более конкретные шаблоны, вы можете сделать что-то вроде этого ...

function phptemplate_preprocess_page(&$variables) {
  if ($variables['node']->type != "") {
    $variables['template_files'][] = "page-node-" . $variables['node']->type;
    $variables['template_files'][] = "page-node-" . $variables['node']->type . "-" . $variables['node']->nid;
  }
}

это позволит следующую иерархию шаблонных предложений

  • page.tpl.php
  • страниц node.tpl.php
  • страниц node- [node_id] .tpl.php
  • страниц node- [node_type] .tpl.php
  • страниц node- [node_type] - [node_id] .tpl.php
0 голосов
/ 14 июня 2012

    function phptemplate_preprocess_page(&$variables) {
      if ($variables['node']->type != "") {
        $variables['template_files'][] = "page-node-" . $variables['node']->type;
        $variables['template_files'][] = "page-node-" . $variables['node']->type . "-" . $variables['node']->nid;
      }
    }

Этот код должен не работать, потому что hook_preprocess_page () не получает никакой информации об узле.hook_preprocess_node () делает.Таким образом, вы можете легко создать собственный файл node.tpl, но вы не можете легко создать собственный файл page.tpl для определенного узла.Не то чтобы я все равно смог понять:)

Позже ...

В Drupal по умолчанию page-node-NID.tpl.php будет работать без специального кодирования.Однако на моем сайте он не работал, и я использовал следующий код, чтобы он работал:

/**
 * Implementation of hook_preprocess_page().
 */
function MYMODULE_preprocess_page(&$variables) {
  // Allow per-node theming of page.tpl
  if (arg(0) == 'node' && is_numeric(arg(1))) {
    $variables['template_files'][] = "page-node-" . arg(1);
  }
}
0 голосов
/ 03 мая 2012

В Drupal 7 просто скопируйте page.tpl.php template и переименуйте его в

страница - узел - [узел: идентификатор] .tpl.php

Очистить кеш и начать настройку ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...