Шаблон страницы не загружается, но загружается шаблон узла

sys информация: установка drupal 6 с кучей модулей... слишком много, чтобы перечислять.

проблема: только определенный тип контента не будет правильно загружать файл шаблона. некоторые узлы, которые будут отображаться на этих страницах через представления, делают это в разметке. это единственный контент, который загружается. файл шаблона, к которому возвращается это содержимое, — node-event.tpl

цель: загрузить page-team.tpl.php

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

mytheme_preprocess_page(&$vars, $hook)

преобразован из _phptemplate_variables () в установку drupal 5.

метод 1:

if (module_exists('path')) {
  $alias = drupal_get_path_alias(str_replace('/edit','',$_GET['q']));
  if ($alias != $_GET['q']) {
    $template_filename = 'page';
    foreach (explode('/', $alias) as $path_part) {
      $template_filename = $template_filename . '-' . $path_part;
      $vars['template_files'][] = $template_filename;
    }
  }
}

метод 2:

if ($vars['node']->og_groups['0'] || preg_match('/fdl\//',$vars['node']->path) || (preg_match('/og\/manage/',$alias) || preg_match('/og\/invite/',$alias) || preg_match('/og\/users/',$alias)) || (preg_match('/node\/add/',$alias) && $_GET['gids'] != '') || $vars['node']->og_description || (arg(0) == 'user' && is_numeric(arg(1)))) { 
  $vars['template_files'][] = 'page-team';

}

page-team — это отсутствующий tpl, и я подозреваю, что в моем коде выше может быть ошибка (метод 2).

я пытаюсь загрузить этот шаблон для всех страниц с первым аргументом пути «fdl», поэтому site.com/fdl и все дочерние элементы fdl.

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


person Matt Ryan    schedule 30.08.2010    source источник
comment
Папка вашей темы уже содержит page.tpl.php? Существует известная ошибка (drupal.org/node/279573), которая говорит о том, что node-foo.tpl .php не может использоваться темой, если node.tpl.php недоступен. То же самое может относиться к page.tpl.php - я не уверен на 100%.   -  person marcvangend    schedule 30.08.2010
comment
спасибо за ваш ответ, но у меня действительно есть page.tpl.php в каталоге темы.   -  person Matt Ryan    schedule 30.08.2010


Ответы (4)


Ну ты кэш почистил? Потому что при работе с темами Drupal обычно ловит вновь добавленные темы и шаблоны после очистки кеша.

А если вы не уверены в своем рег. exp., я считаю, что вы можете просто написать это:


if(strpos(drupal_get_path_alias($_GET['q']),'fdl')===0){
    $vars['template_files'][] = 'page-team';
}

И очистить кеш.

person angryobject    schedule 30.08.2010
comment
я очистил кеш, безрезультатно. спасибо за ваш фрагмент, но и здесь не повезло. страница по-прежнему загружает только шаблон узла, а не шаблон страницы. - person Matt Ryan; 30.08.2010
comment
Он должен работать. Я только что проверил это в своем проекте. См. ниже весь пример. - person angryobject; 31.08.2010

Это то, что у меня есть в моем template.php:


function frontend_preprocess_page(&$vars){
  if(strpos(drupal_get_path_alias($_GET['q']),'dummy_tests')===0){
      $vars['template_files'][] = 'page-dummy';
  }
}

frontend — это название моей темы. У меня есть файл page-dummy.tpl.php внутри папки темы. Чтобы убедиться, что это работает, я добавил «ЭТО РАБОТАЕТ» сразу после тега body. Потом почистил кеш. Теперь я захожу на страницу «mydomain.com/dummy_tests/1» и вижу, что ЭТО РАБОТАЕТ.

Если у вас возникли проблемы, попробуйте проверить вывод drupal_get_path_alias($_GET['q']). Просто сделать


print drupal_get_path_alias($_GET['q']);

прямо внутри функции preprocess_page(). И если он действительно начинается с "fdl", то все должно работать. Это рабочий пример, поэтому вы просто пытаетесь поиграть и выяснить, почему он не работает для вас.

Кстати, попробуйте удалить шаблон узла и оставить только шаблон страницы. Я не знаю почему, но может быть что-то не так и друпал их портит.

person angryobject    schedule 30.08.2010
comment
да, запрос правильный, но все равно страница tpl не загружается. вы думаете, что из-за того, что это настраиваемый тип контента, возникает проблема? - person Matt Ryan; 31.08.2010
comment
Не совсем. Я не думаю, что пользовательский тип контента может сделать что-то не так. И я просто не могу понять, почему это не работает для вас. - person angryobject; 31.08.2010
comment
так странно, удалив шаблон узла, шаблон страницы стал доступен. Я все еще хотел бы знать, что именно дало приоритет узлу, но спасибо за вашу помощь. - person Matt Ryan; 31.08.2010
comment
Если это так, то, вероятно, шаблон узла каким-то образом окажется последним элементом массива $vars['template_files']. Поскольку шаблоны применяются в обратном порядке, они идут в этом массиве. Но да, это все еще странно. И я никогда не сталкивался с этим раньше как-то. Я думаю, что попытаюсь создать как узел, так и шаблоны страниц и посмотреть, работает ли это. - person angryobject; 31.08.2010
comment
да, но мне нужны оба. страница и узлы на ней для шаблона - person Matt Ryan; 31.08.2010
comment
Прошу прощения, что так долго отсутствовал, просто было много работы. Но я попробовал кое-что, и это сработало. Смотрите ответ ниже. Если у вас не сработает... Ну я даже не знаю чем еще помочь( - person angryobject; 06.09.2010

Я попытался добавить пользовательские шаблоны в функции page_preprocess и node_preprocess. И это работало как для шаблонов страниц, так и для узлов.


function frontend_preprocess_page(&$vars){
  if(strpos(drupal_get_path_alias($_GET['q']),'dummy_tests')===0){
      $vars['template_files'][] = 'page-dummy';
  }
}

function frontend_preprocess_node(&$vars){
  if(strpos(drupal_get_path_alias($_GET['q']),'dummy_tests')===0){
      $vars['template_files'][] = 'node-dummy';
  }
}

person angryobject    schedule 06.09.2010

я нашел устаревшую функцию ссылки в шаблоне. обновление параметров все исправило.

person Matt Ryan    schedule 22.09.2010