Page templates depending on node type drupal7

1
2
3
4
5
function themename_preprocess_page(&$variables) {
if (!empty($variables['node'])) {
$variables['theme_hook_suggestions'][] = 'page__node__' . $variables['node']->type;
}
}

更复杂的用法如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
/**
* Variables preprocess function for the "page" theming hook.
*/
function THEME_NAME_preprocess_page(&$vars) {
// Do we have a node?
if (isset($vars['node'])) {
// Ref suggestions cuz it's stupid long.
$suggests = &$vars['theme_hook_suggestions'];
// Get path arguments.
$args = arg();
// Remove first argument of "node".
unset($args[0]);
// Set type.
$type = "page__type_{$vars['node']->type}";
// Bring it all together.
$suggests = array_merge(
$suggests,
array($type),
theme_get_suggestions($args, $type)
);
// if the url is: 'http://domain.com/node/123/edit'
// and node type is 'blog'..
//
// This will be the suggestions:
//
// - page__node
// - page__node__%
// - page__node__123
// - page__node__edit
// - page__type_blog
// - page__type_blog__%
// - page__type_blog__123
// - page__type_blog__edit
//
// Which connects to these templates:
//
// - page--node.tpl.php
// - page--node--%.tpl.php
// - page--node--123.tpl.php
// - page--node--edit.tpl.php
// - page--type-blog.tpl.php << this is what you want.
// - page--type-blog--%.tpl.php
// - page--type-blog--123.tpl.php
// - page--type-blog--edit.tpl.php
//
// Latter items take precedence.
}
}