在theme_preprocess_page中添加自定义可变量变量

时间:2011-02-22 09:10:35

标签: drupal drupal-7

我一遍又一遍地阅读文档试图围绕这个看似简单的任务。基本上,我有一个模板,在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']是获取顶级变量的方法。我还没有明确地弄清楚如何关联此变量为模板文件。

2 个答案:

答案 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

如果您没有定义预处理功能,请记得清除缓存。

<强>更新
你好像错过了一个关键点。预处理函数(以及实际的主题调用)是如何在模板中访问变量的。为不同的模板调用不同的预处理函数(..._pagepage.tpl.php。)

使用正确的预处理功能并清除缓存后,您是否还有问题?