如何为每个页面获取不同的模板

时间:2010-08-20 15:50:55

标签: php drupal drupal-6

我必须使用drupal创建一个简单的CMS,它有4个页面,每个页面都有独特的设计。

3 个答案:

答案 0 :(得分:1)

我认为你所谈论的四个页面都是节点。主题可以针对不同的内容类型使用不同的模板 与template_preprocess_node()完成的方式相同,模块可以实现hook_preprocess_node(),并建议使用不同的模板文件。

// This code is present in template_preprocess_node().
// Clean up name so there are no underscores.
$variables['template_files'][] = 'node-'. $node->type;

// This is what the module custom_module.module can write in custom_module_preprocess_node().
$variables['template_files'][] = 'node-'. $node->uid;

如果自定义模块想要确保在其他模板文件之前检查它建议的模板,那么它可以采用以下代码:

if (isset($variables['template_files']) && is_array($variables['template_files'])) {
  $variables['template_files'] = array_unshift($variables['template_files'], 'node-'. $node->uid);
}

主题必须具有带有建议名称的模板文件(例如,对于ID为1的节点为node-1.tpl.php),或者将使用默认模板文件node.tpl.php。

答案 1 :(得分:1)

如果您想要一个完全不同的页面设计(不仅仅是不同的背景,或内容区域的外观或类似的东西),我认为最好使用页面模板而不是节点模板。默认情况下,您可以使用模板page-node-nid.tpl.php(将nid替换为节点的id)。

例如,如果您想要特定节点类型的不同设计 - 您可以在template.php中使用theme_preprocess_page函数:

function yourtheme_preprocess_page(&$vars, $hook){
     $vars['template_files'][] = 'page-'.$vars['node']->type;
}

答案有点类似于上面的答案,但这里的关键点是使用页面模板而不是节点模板(和preprocess_page而不是preprocess_node)。因为使用节点模板只允许您更改内容的输出,而页面模板允许您从头开始编写完整的模板< html>标签

P.S。并且在处理主题时不要忘记清除缓存,以防万一。

答案 2 :(得分:0)

Sections模块允许您从节点的编辑页面分配每个节点的主题。

它的主要目的是允许每个'部分'一个主题,所以例如admin / *可以使用Garland,mymicrosite / *可以使用customtheme1,而网站的其余部分可以使用customtheme2,但是你可以创建一个'section-每个节点',这是你试图在节发言:0)