Drupal 7 - 将变量从自定义模块传递给模板的致命错误

时间:2013-10-08 18:08:15

标签: drupal-7 drupal-6 migration drupal-theming

我正在将一个模块从Drupal 6移植到Drupal 7,我试图将一个变量从我的自定义模块传递给模板。我有这样的事情:

function my_callback_function(){

  ... //some unrelated code

  $page_params = array();
  $page_params['items_per_page'] = 25;
  $page_params['page'] = $_GET['page'] ? $_GET['page'] : 0;
  $page_params['total_items'] = $data_provider->getNumItems();
  $page_params['total_pages'] = $data_provider->getNumPages($page_params['items_per_page']);

  return theme('my_theme', $page_params);
}


function my_module_theme($existing, $type, $theme, $path) {
  return array(
    'my_theme' => array(
      'variables' => array('page_params' => NULL),
      'template' => 'theme/my_template_file',
    ),
  );
}

在* my_template_file.tpl.php里面*我尝试使用$ page_params:

<?php print $page_params['total_items']; ?>

所有这些都让我的网站抛出以下错误:

  

致命错误:不支持的操作数类型   C:...... \包含1075行的\ theme.inc

这与 theme.inc 中的这些代码行相对应:

// Merge in argument defaults.
  if (!empty($info['variables'])) {
    $variables += $info['variables']; // THIS IS THE VERY EXACT LINE
  }
  elseif (!empty($info['render element'])) {
    $variables += array($info['render element'] => array());
  }

如果我在Drupal 6中保留 theme()调用,则不会出现错误,但我的模板无法识别$ page_params变量:

  return theme('my_theme', array('page_params' => $page_params));

我已经阅读了一半的API试图弄清楚我做错了什么但是据我所知,似乎这是将变量从自定义模块传递到模板的正确方法。 因此,任何形式的帮助都将受到欢迎。

提前致谢。

2 个答案:

答案 0 :(得分:1)

最后,我弄清楚我做错了什么。事实上,他们有几件事:

我的主题()调用还可以:

return theme('my_theme', $page_params);

但我的hook_theme实现不是。如果$ page_params是我的变量数组,我不能将整个数组用作变量,我必须明确指定数组中的变量。像这样:

function my_module_theme($existing, $type, $theme, $path) {
  return array(
    'my_theme' => array(
          'variables' => array(
            'items_per_page' => NULL,
            'page' => NULL,
            'total_items' => NULL,
            'total_pages' => NULL,
          ),
    'template' => 'theme/my_template_file',
  );
}

最后,在my_template_file.tpl.php中,我将不得不直接使用变量名,而不是将它们用作$ page_params的一个组件:

<?php print $total_items; ?>

对于有经验的用户来说这似乎是显而易见的但是我花了一段时间才意识到这一点。我希望它对像我这样的其他初学者有用。

答案 1 :(得分:0)

您可以使用drupal variable_set()和variable_get()在drupal会话中存储数据并从会话中获取数据。

谢谢