我一遍又一遍地阅读文档试图围绕这个看似简单的任务。基本上,我有一个模板,在html.tpl.php中有一个'skip navigation'div硬编码,我不希望在页面上。
我的想法是在theme_preprocess_page中设置$ vars ['skiplink']变量。由于这个变量包含几行html标记,我的目标是在花环主题中看到的东西:
function garland_preprocess_page(&$vars) {
// Move secondary tabs into a separate variable.
$vars['tabs2'] = array(
'#theme' => 'menu_local_tasks',
'#secondary' => $vars['tabs']['#secondary'],
);
<snip>
我想将html放在一个可用函数甚至一个模板中,但我甚至无法让这个代码片段起作用:
/**
* Override or insert variables into the page template.
*/
function morin_preprocess_page(&$vars) {
// add skiplink markup
$vars['skiplink'] = 'hello world';
}
这会产生一个通知:
注意:未定义的变量:include()中的skiplink(/var/dev/morin/www/sites/all/themes/morin/templates/html.tpl.php中的ligne 14)。
任何人都可以给我一个线索吗?我真的想了解如何使用这两种方法(模板和功能)来做到这一点。我也想知道这是否应该在模块中完成?
我意识到可能有10种方法可以对这只猫进行修饰,因此欢迎任何有关所用方法的优缺点的见解。
好吧我发现我使用了错误的预处理功能,在preprocess_html中设置$ vars ['skiplink']是获取顶级变量的方法。我还没有明确地弄清楚如何关联此变量为模板文件。
答案 0 :(得分:2)
预处理挂钩遵循以下模式:
<theme name>_preprocess_<template name>
因此,如果你想修改“html.tpl.php”的变量,你想使用这个钩子:
<theme name>_preprocess_html(&$variables)
答案 1 :(得分:0)
您正在使用preprocess_page
但是您要在html.tpl.php
。
您应该将其插入page.tpl.php
或重命名预处理函数,以将变量添加到html.tpl.php
如果您没有定义预处理功能,请记得清除缓存。
<强>更新强>
你好像错过了一个关键点。预处理函数(以及实际的主题调用)是如何在模板中访问变量的。为不同的模板调用不同的预处理函数(..._page
等page.tpl.php
。)
使用正确的预处理功能并清除缓存后,您是否还有问题?