2

好的,这是交易:我正在构建一个有几个不同部分的 Drupal 网站。每个部分都是显示内容类型的视图。(每个部分都有自己的内容类型)例如,我有一个视图指向?q=blog哪个显示内容类型blog

所有部分看起来都略有不同。不像 'website-within-a-website' 不同但足够不同以至于它们不能都使用相同的模板文件并且每个都可以使用 CSS 进行修改。每个部分都需要它自己的page.tpl.php.

不幸的是,AFAIK Drupal 主题的 .info 文件只能page.tpl.php为整个主题分配一个或page-node-####.tpl.php为每个节点分配一个。这个网站上会有很多内容,所以设置 Drupalpage-node-####.tpl.php为每个创建的节点创建一个新的相同节点会很快变得难以管理。

为了解决这个问题,我将使用 pathauto 为每种内容类型创建一个别名。例如,所有内容类型的节点blog都被赋予一个别名?q=blog/[post title]。修改template.phppage-blog.tpl.php用于别名以“博客”开头的任何页面。

其他人已经尝试过做这种事情并创建了如所描述的功能。不幸的是,我看到的所有这些都是针对 Drupal 6 或更低版本的。我曾尝试修改现有的但没有成功。不过,到目前为止,我认为这是在正确的轨道上:

function basic_preprocess_page(&$vars, $hook) {
    ...

    if( module_exists('path') ) {
        $alias = drupal_get_path_alias( $_GET['q'] );
        $site_section = "blog";
        if( strpos( $alias, $site_section ) === 0 ) {
            $VARIABLE_THAT_TELLS_THE_PAGE_WHAT_TEMPLATE_TO_USE = "/path/to/page-blog.php";
        }
    }
}

我找不到$VARIABLE_THAT_TELLS_THE_PAGE_WHAT_TEMPLATE_TO_USE有人知道它是什么吗?

也许我的网站结构很糟糕。如果有人知道如何重组我的网站,以便我可以更轻松地制作带有单独部分的主题,请分享如何!

太感谢了!(c:

编辑:也许我需要改用模板建议。有谁知道用来设置它的函数或变量吗?

4

2 回答 2

3

他们在 D7 中更改了这个数组键的名称,我还没有在任何地方看到它的记录。经过一番调试后,我终于弄清楚了。您可以使用 hook_preprocess_page() 覆盖 template.php 中的主题模板,如下所示:

function myTheme_preprocess_page(&$vars) {
global $node;

if ($node->type == 'blog') {
     $vars['theme_hook_suggestions'] = array('my__blog_template'); // use my--blog-template.tpl.php, note '-' = '_'
}
elseif ($node->type == 'articles') {
    $vars['theme_hook_suggestions'] = array('article__node_template'); // use article--node-template.tpl.php
}
}

哦,不要忘记在更改您的 template.php 后刷新 Drupal 缓存。

于 2011-04-13T01:05:53.767 回答
0

好的,我找到了: http ://drupal.org/node/223440#comment-991840

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

此功能归功于用户 mfb。

我在这方面遇到了很多麻烦,所以我会在这里解释一下,以防有人觉得它有用。

这个功能在你的template.php. 它需要成为<theme name>_preprocess_page功能的一部分。它的作用是获取别名,然后将其分解为一堆不同的组件。例如,如果您在具有别名的页面上,?q=blog/blog-post-title它将被分解为blogand blog-post-title。然后它将每个组件转换为模板建议的名称。它将每个模板建议放入template_files[]数组(在$variables[]数组内部),因此页面现在有两个新的模板建议:

page-blog, 和page-blog-blog-post-title

模板建议是备用模板文件。在这种情况下,它们用于页面,但不一定非要如此。您可以为您能想到的任何内容提供模板建议,包括块、节点等。不要让“模板建议”这个名称欺骗了您。模板建议将在默认模板上使用,只要它们存在。我不知道为什么它被这样命名。我觉得应该改名。

那么,既然您已经设置 Drupal 来寻找指向您的别名的模板建议,那么您要做的就是创建一个新的模板文件,其中所有其余的都在您的主题中。在这种情况下,假设我想为我的整个博客部分设置主题。page--blog.tpl.php在模板文件夹中,我应该使用我想要的布局创建一个名为(注意--双连字符--)的文件。

Drupal 将使用它可以找到的最具体的模板建议,因此如果您希望您可以使一篇博客文章看起来与站点的其余部分完全不同,只要您为其命名模板page--blog--blog-post-title并将其放入主题的模板目录中即可。(再次注意双连字符。)

于 2011-04-12T22:03:43.253 回答