【问题标题】:Drupal 7 - fatal error passing a variable from custom module to a templateDrupal 7 - 将变量从自定义模块传递到模板的致命错误
【发布时间】:2013-10-08 18:08:15
【问题描述】:

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

提前致谢。

【问题讨论】:

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


    【解决方案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; ?>
    

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

    【讨论】:

      【解决方案2】:

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

      谢谢

      【讨论】:

      • 感谢您的回答,遗憾的是我从来没有尝试过这个,因为最后我的代码工作了。但无论如何,我想知道一种方式是否比另一种更好,或者您选择哪种方式无关紧要。
      • 这不是推荐的方法。不要将 variable_set 用于临时值或会话值。
      猜你喜欢
      • 1970-01-01
      • 2016-12-31
      • 1970-01-01
      • 1970-01-01
      • 2022-11-07
      • 1970-01-01
      • 2011-07-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多