Drupal 7 - получить переменные из hook_theme
Я пытался передать переменную из пользовательского модуля в файл TPL. В моем пользовательском модуле (названный пример)
1. Я создал маршрут с аргументом через hook_menu:
function example_menu() {
$items['example/fancybox-photos/%'] = array(
'page callback' => 'example_display_fancybox_photos',
'page arguments' => array(2),
'type' => MENU_CALLBACK,
'access arguments' => array('access content'),
);
return $items;
}
2. Я создал функцию обратного вызова моей страницы:
function example_display_fancybox_photos($nid) {
$nodePhoto = node_load($nid);
$field_photo = field_get_items('node', $nodePhoto, 'field_photo');
$photo = [
"field_photo" => $field_photo[0]['uri'],
....
];
return theme('example_fancybox_photos', array('infosPhoto' => $photos));
}
3 Я создал hook_theme
function example_theme() {
$themes = array();
$themes['example_fancybox_photos'] = array(
'template' => 'templates/example-fancybox-photos',
'variables' => array('infosPhoto' => NULL),
);
return $themes;
}
4 Наконец, я создал TPL с именем "example-fancybox-photos.tpl.php" в папке шаблонов (в папке темы)
<pre><?php print var_dump($infosPhoto); ?></pre>
Результат NULL
Я провел некоторые исследования, но я не понимаю, почему переменная по-прежнему NULL.
Спасибо за вашу помощь!
2 ответа
Вы прошли $photos
но у вас есть массив как $photo
, попытаться изменить это
Надеюсь, приведенный ниже код поможет вам.
function example_menu(){
$items['example/fancybox-photos/%'] = array(
'page callback' => 'example_display_fancybox_photos',
'page arguments' => array(2),
'type' => MENU_CALLBACK,
'access arguments' => array('access content'),
);
return $items;
}
function example_display_fancybox_photos($nid){
$photos = 'value from example module!';
return theme('example_fancybox_photos',array('photos' => $photos));
}
function example_theme() {
$path = drupal_get_path('module', 'example');
return array(
'example_fancybox_photos' => array(
'variables' => array('photos' => null),
'template' => 'example_fancybox_photos',
'path' => $path,
),
);
}
Поместите ваш файл tpl example_fancybox_photos.tpl.php в каталог вашего модуля и внутри него используйте приведенный ниже код.
<?php print $photos; ?>
или же
function example_theme() {
return array(
'example_fancybox_photos' => array(
'variables' => array('photos' => null),
'template' => 'example_fancybox_photos',
),
);
}
Поместите ваш файл tpl example_fancybox_photos.tpl.php в каталог вашей темы и внутри него поместите следующий код
<?php print $photos; ?>
Мне наконец удалось получить переменную из модуля в TPL!
1. Я создал маршрут с аргументом через hook_menu:
function example_menu() {
$items['example/fancybox-photos/%'] = array(
'page callback' => 'example_display_fancybox_photos',
'page arguments' => array(2),
'type' => MENU_CALLBACK,
'access arguments' => array('access content'),
);
return $items;
}
2. Я создал функцию обратного вызова моей страницы:
function example_display_fancybox_photos($nid) {
$nodePhoto = node_load($nid);
$field_photo = field_get_items('node', $nodePhoto, 'field_photo');
$photos = [
"field_photo" => $field_photo[0]['uri'],
....
];
return theme('example_fancybox_photos', array('infosPhoto' => $photos));
}
3 Я создал hook_theme
function example_theme() {
$themes = array();
$themes['example_fancybox_photos'] = array(
'template' => 'templates/example_fancybox_photos',
'variables' => array('infosPhoto' => NULL),
);
return $themes;
}
4 Я наконец создал tpl с именем "example_fancybox_photos.tpl.php" в папке шаблонов (в папке MODULE (пример))
Проблемы заключались в том, что: - tpl не был назван одинаково и с черточками вместо подчеркивания - tpl был в папке с шаблонами темы, а не модуля