【问题标题】:The page template is not loading, but the node template is loading页面模板未加载,但节点模板正在加载
【发布时间】:2010-08-30 04:01:31
【问题描述】:

系统信息:drupal 6 安装,包含大量模块...太多无法列出。

问题:只有特定的内容类型不会正确加载它的模板文件。将通过视图显示在这些页面上的一些节点正在进入标记。它们是唯一被加载的内容。此内容依赖的模板文件是 node-event.tpl

目的:加载page-team.tpl.php

模板建议通过预处理通过两种方式在template.php中加载

mytheme_preprocess_page(&$vars, $hook)

在 drupal 5 安装中从 _phptemplate_variables () 转换而来。

方法一:

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

方法二:

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 的所有子级。

我知道有很多可能性。但我感觉错误就在这里。感谢您提供的任何帮助。

【问题讨论】:

  • 您的主题文件夹是否已经包含 page.tpl.php?有一个已知错误 (drupal.org/node/279573) 表示当 node.tpl.php 不可用时,主题不能使用 node-foo.tpl.php。这同样可能适用于 page.tpl.php - 我不是 100% 确定。
  • 感谢您的回复,但我确实在主题目录中有page.tpl.php。

标签: php drupal drupal-6 preprocessor drupal-5


【解决方案1】:

嗯,你清除缓存了吗?因为在处理主题时,drupal 通常会在清除缓存后捕获新添加的主题和模板。

如果你不确定你的 reg. exp.,我相信你可以简单地写成这样:

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

并清除缓存。

【讨论】:

  • 我已清除缓存,但无济于事。感谢您的 sn-p,但也没有运气。页面仍然只加载节点模板而不加载页面模板。
  • 它应该可以工作。我刚刚在我的项目中对其进行了测试。请参阅下面的整个示例。
【解决方案2】:

这就是我的 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 标记之后添加了“IT WORKS”。然后清除缓存。现在我转到“mydomain.com/dummy_tests/1”页面,看到它工作正常。

如果遇到问题,请尝试检查 drupal_get_path_alias($_GET['q']) 的输出。做吧

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

就在 preprocess_page() 函数内部。如果它真的以“fdl”开头,那么一切都应该有效。这是一个有效的示例,因此您只需尝试尝试并找出它为什么不适合您。

顺便说一句,尝试删除节点模板并仅保留页面模板。我不知道为什么,但可能是出了点问题,drupal 把它们弄乱了。

【讨论】:

  • 是的,查询是正确的,但是页面 tpl 仍然没有加载。您认为因为它是自定义内容类型存在问题?
  • 并非如此。我不认为自定义内容类型会出错。我就是想不通为什么这对你不起作用。
  • 太奇怪了,通过删除节点模板页面模板可用。我仍然想知道究竟是什么赋予了节点优先级,但是,感谢您的帮助。
  • 如果是这种情况,那么节点模板可能似乎是 $vars['template_files'] 数组的最后一个元素。因为模板以相反的顺序应用,所以它们进入这个数组。但是,是的,这仍然很奇怪。而且我以前从未遇到过这种情况。我想我会尝试创建节点和页面模板,看看它是否有效。
  • 是的,但我两者都需要。要模板化的页面及其上的节点
【解决方案3】:

我尝试在 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'; } }

【讨论】:

    【解决方案4】:

    我在模板中发现了一个已弃用的链接功能。更新参数修复了一切。

    【讨论】:

      猜你喜欢
      • 2023-03-18
      • 2013-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-14
      • 1970-01-01
      • 1970-01-01
      • 2015-11-11
      相关资源
      最近更新 更多