Передача переменных в веточку с помощью hook_theme внутри модуля

Я полностью знаю, как это сделать в 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)

Я также открыт к идее, что я могу делать в корне неверные вещи, и я открыт для альтернативного маршрута, если мой метод не является наилучшей практикой.

5

Решение

Нашел проблему,

меняя это,

$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
);

Теперь я могу видеть переменные, которые я передаю.

Я все еще открыт для лучшего варианта?

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]