特定自定义内容类型条目的候选页面模板文件名


11

我正在Drupal 7网站上工作。我为作品创建了自定义内容类型。我有很多字段,其中一些与页面布局有关,例如每个条目的特定页面背景。因此,我需要针对此特定内容类型自定义page.tpl。

因此,我激活并打开了主题开发器模块,然后单击正文区域以获取此特定内容类型页面条目的候选名称。它给了我下面的屏幕,对我来说没有任何意义:/当我单击节点区域时,这很好,它给出了node--work.tpl.php,但是我需要页面。我尝试了“ page--work.tpl.php”,但没有成功。

我想念什么?

在此处输入图片说明

Answers:


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

假设您的机器可读内容类型名称为“ work”,则page--work.tpl.php将起作用。

有关更多信息,请参考此线程


哇!效果很好!我现在可以寻址到page--work.tpl.php :)尽管它可以正常工作,但我在 搜索并尝试解决d.pr/EaMa时出现了错误消息,仍在尝试...有什么想法吗?非常感谢您的宝贵时间!
Drupal家伙

哦,我想这是因为主题开发器模块所致。我禁用了模块,错误消失了:)非常感谢!
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

如果您还需要节点ID,请使用它。

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

您可以稍微修改一下代码以使其更有效。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.