使用模块中的hook_theme将变量传递给twig

时间:2015-12-05 19:30:25

标签: php drupal drupal-modules drupal-8

我完全知道如何在Drupal 7中执行此操作,因此我将解释使用Drupal 7时通常会做什么。

在制作自定义模块时,我经常使用hook_theme,它非常强大且可重复使用!

/**
 * Implements hook_theme().
 */
function MODULE_theme() {
    $themes = array();

    $themes['name_of_theme'] = array(
      'path' => drupal_get_path('module', 'module') .'/templates',
      'template' => 'NAME_OF_TEPLATE',
      'variables' => array(
        'param1' => NULL,
        'param2' => NULL,
      ),
    );

    return $themes;
}

然后我会用

来调用这个主题
theme('name_of_theme', array(
   'param1' => 'VALUEA',
   'param2' => 'VALUEB'
)); 

这将返回html,我会很高兴。

因此,Drupal 8需要掌握它。

/**
 * Implements hook_theme().
 */
function helloworld_theme() {
  $theme = [];

  $theme['helloworld'] = [
    'variables' => [
      'param_1' => [],
      'param_2' => 'hello',
    ]
  ];

  return $theme;
}

在我的控制器内我正在使用

$hello_world_template = array(
  '#theme' => 'helloworld',
  'variables' => [
    'param_1' => 'hello world',
    'param_2' => 'hello from another world'
  ],
);

$output = drupal_render($hello_world_template,
  array(
    'variables' => array(
      'param_1' => $param_1,
      'param_2' => $param_2,
    )
  )
);

return [
    '#type' => 'markup',
    '#markup' => $output
];

我正在获取模板的输出,但是我不确定的是在哪里传递我的参数以便它们在我的模板中可用(只是为了指出我的变量可用它们只是在hook_theme)

我也接受这样的想法,即我可能会做出根本性的错误,如果我的方法不是最佳做法,我可以选择另一条路线。

1 个答案:

答案 0 :(得分:2)

发现问题,

改变这个,

$hello_world_template = array(
  '#theme' => 'helloworld',
  'variables' => [
    'param_1' => 'hello world',
    'param_2' => 'hello from another world'
  ],
);

到此,

$hello_world_template = array(
  '#theme' => 'helloworld',
  '#param_1' => $param_1,
  '#param_2' => $param_2
);

我现在能够看到我正在传递的变量。

我仍然愿意接受更好的选择吗?