我必须使用drupal创建一个简单的CMS,它有4个页面,每个页面都有独特的设计。
答案 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)