好的,事情是这样的:我正在构建一个包含几个不同部分的 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/