0

我正在将一个模块从 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:...\includes\theme.inc 中不支持的操作数类型(第 1075 行)

这与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,试图找出我做错了什么,但据我所知,这似乎是将变量从自定义模块传递到模板的正确方法。因此,任何形式的帮助都将受到欢迎。

提前致谢。

4

2 回答 2

1

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

我的 theme() 调用没问题:

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; ?>

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

于 2013-10-10T08:48:25.383 回答
0

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

谢谢

于 2013-10-09T10:47:07.013 回答