Имя файла шаблона кандидата для определенного пользовательского типа контента

11

Я работаю над сайтом Drupal 7. Я создал собственный тип контента для работ. У меня много полей, и некоторые из них связаны с макетом страницы, например с конкретной страницей bg для каждой записи. Поэтому мне нужен собственный page.tpl для этого конкретного типа контента.

Поэтому я активировал и открыл модуль Theme Developer и щелкнул область тела, чтобы получить имя кандидата для этой конкретной записи страницы типа контента. и это дает мне экран ниже, который ничего не значит для меня: / Когда я щелкаю область узла, это нормально, это дает node - work.tpl.php, но мне нужно для страницы. Я попытался "page - work.tpl.php", это не сработало.

Что мне не хватает?

введите описание изображения здесь

Drupal парень
источник

Ответы:

12
function mytheme_process_page(&$variables) {
    $variables['theme_hook_suggestions'][] = 'page__'. $variables['node']->type;
}

Предполагая, что ваше машиночитаемое имя типа контента - «работа», page - work.tpl.php будет работать.

Обратитесь к этой теме для получения дополнительной информации.

mingos
источник
Вот Это Да! это работало отлично! Я могу обратиться к странице - work.tpl.php сейчас :), хотя он работает нормально, у меня есть сообщение об ошибке, как d.pr/EaMa, я погуглил и попытался решить, все еще пытаясь ... есть идеи? Большое спасибо за ваше время!
Drupal парень
о, я думаю, это из-за модуля Theme Developer. Я отключаю модуль и ошибка ушла :) Большое спасибо!
Drupal парень
2

В template.php добавьте:

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

Вы можете опустить str_replace(); Проверьте, какая версия работает лучше для вас.

Затем создайте файл шаблона с именем файла page –- [content_type] .tpl.php. (Замените [content_type] именем машины типа контента.)

См. Http://drupal.org/node/1089656#comment-4426790 .

МОЛОТ
источник
1

Если вам нужен также идентификатор узла, используйте это.

function mytheme_process_page(&$variables) {
  if (isset($variables['node'])) { 
    $variables['theme_hook_suggestions'][] = 'page__type__'. $variables['node']->type;
    $variables['theme_hook_suggestions'][] = 'page__node__' . $variables['node']->nid;
  }
}

источник
0

Ребята из Drupal не рекомендуют иметь разные шаблоны для каждого типа контента. Вот почему вы не можете найти его page--work.tpl.phpв списке файлов-кандидатов. Они чувствуют, что только файлы шаблона узла должны отличаться. Однако, если вы хотите взломать, идти вперед.

Используйте псевдоним пути, чтобы установить путь в зависимости от типа контента. А затем вставьте этот код

 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;
      }
    }
  }

в phptemplate_preprocess_page(&$vars)функцию template.phpв папке темы.

Вы можете немного изменить код, чтобы сделать его более эффективным.

Гокул Н.К.
источник