php - Drupal 7 - template.php 中指示使用哪个页面模板的变量是什么?

标签 php templates drupal-7 drupal-themes

好的,事情是这样的:我正在构建一个包含几个不同部分的 Drupal 网站。每个部分都是一个显示内容类型的 View 。 (每个部分都有自己的内容类型)例如,我有一个指向 ?q=blog 的 View ,它显示内容类型 blog

所有部分看起来都略有不同。与“网站内的网站”不同,但差异足够大,以至于它们不能全部使用相同的模板文件并使用 CSS 进行修改。每个部分都需要它自己的page.tpl.php

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

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

其他人尝试过做这类事情,并创建了与所描述的类似的功能。不幸的是,我看到的所有都是针对 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:

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

最佳答案

他们在 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 缓存。

关于php - Drupal 7 - template.php 中指示使用哪个页面模板的变量是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5627860/

相关文章:

php - 复选框仅返回第一个值

javascript - Php 在设定日期后显示信息

javascript - jquery更多使用data属性的点击功能

templates - 开始使用 Latex Beamer 模板编辑

css - 仅在 404 页面上隐藏面包屑

mysql - 如何从 Drupal 中连接到 MySQL

php - MYSQL - 剩余数量 - 带序列号的产品 - 多表

c# - 如何在 C# 中将 System.IO.BinaryWriter 与模板/泛型类型的数组一起使用?

c++ - error C2783 无法推断模板参数

Drupal 7 自定义模块错误