将变量传递给模板文件

时间:2012-03-27 09:32:37

标签: php drupal drupal-7

在我正在开发的模块中,我使用以下代码。

function mymodule_page_alter(&$page) {
  global $user;

  $page['sidebar_first'] = array(
    '#markup' => 'text for first sidebar'
  );
}

如何将HTML模板文件加载到第一个侧栏,并将少量变量传递给它? 也许这将类似于以下代码。

$page['sidebar_first'] = array(
  '#template' => path,
  '#variables' => array(),
);

1 个答案:

答案 0 :(得分:0)

您需要使用“#theme”属性,例如以下代码。

  $build['dblog_table'] = array(
    '#theme' => 'table',
    '#header' => $header,
    '#rows' => $rows,
    '#attributes' => array('id' => 'admin-dblog'),
    '#empty' => t('No log messages available.'),
  );

#theme告诉Drupal需要调用哪个主题函数;其他属性,如果它们已经用于不同的目的,则用作变量名称以传递给主题函数,或模板文件(如果使用的话)。

在示例中,theme_table()将收到以下数组。

array(
  'header' => $header,
  'rows' => $rows,
  'attributes' => array('id' => 'admin-dblog'),
  'empty' => t('No log messages available.'),
);

即使使用那些真正使用模板文件的主题函数,也可以这样做。

您可以使用用于使用模板文件的主题函数的必要键在hook_theme()中定义主题函数,例如在以下代码中。

function mymodule_theme($existing, $type, $theme, $path) {
  return array(
    'mymodule_sidebar' => array(
      'variables' => array('topics' => NULL, 'parents' => NULL, 'tid' => NULL, 'sortby' => NULL),
      'template' => 'mymodule-display',
    ),
  );
}

然后,主题函数将使用类似于以下代码的内容。

$page['sidebar_first'] = array(
  '#theme' => 'mymodule_sidebar',
  '#topics' => array('first topic', 'second topic', 'third topic'),
  '#parents' => array('my topics', 'my friend's topics'),
);

未获得显式值的变量将获得hook_theme()中报告的默认值;在这种情况下,使用的变量的默认值为NULL