为了对我网站中的特定页面进行主题化,我创建了一个名为node - 2.tpl.php的文件。根据我读到的其他一些教程,我将其添加到我的template.php文件中:
function mtheme_preprocess_node(&$vars) {
if (request_path() == 'node/2') {
$vars['theme_hook_suggestions'][] = 'node__2';
}
}
在这个页面上,我希望渲染名为schools_landing的区域。因此,node - 2.tpl.php看起来像这样,没有别的:
<?php print render($page['schools_landing']); ?>
执行此操作后,我开始在管理员覆盖图的顶部看到以下错误消息:
Warning: Cannot use a scalar value as an array in include() (line 1 of /home/something/public_html/project/sites/all/themes/mtheme/node--2.tpl.php).
此外,我可以在节点--2.tpl.php文件中编写文本,它显示正常(而不是默认页面内容),但我根本无法在区域内部渲染块。如果我将一个块分配给schools_landing块,我在页面上看不到任何内容。
答案 0 :(得分:2)
在node template中,$page
是布尔值,而不是数组。这就是你得到这个错误的原因
template_preprocess_node()使用以下代码设置它。
$variables['page'] = $variables['view_mode'] == 'full' && node_is_page($node);
hook_preprocess_page()
获取具有您期望值的变量$page
。{
template_preprocess_page()包含以下代码。
foreach (system_region_list($GLOBALS['theme']) as $region_key => $region_name) {
if (!isset($variables['page'][$region_key])) {
$variables['page'][$region_key] = array();
}
}
page.tpl.php将$page
描述为:
地区:
$page['help']
:动态帮助文字,主要用于管理页面。$page['highlighted']
:突出显示的内容区域的项目。$page['content']
:当前页面的主要内容。$page['sidebar_first']
:第一个侧边栏的项目。$page['sidebar_second']
:第二个侧边栏的项目。$page['header']
:标题区域的项目。$page['footer']
:页脚区域的项目。
可以从主题实施额外的区域。
作为旁注,template_preprocess_node()
已经建议了以下模板名称。
$variables['theme_hook_suggestions'][] = 'node__' . $node->type;
$variables['theme_hook_suggestions'][] = 'node__' . $node->nid;
无需为您的主题或自定义模块建议它们。