我试图将自定义模块中的变量传递给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。我终于在模板文件夹(主题文件夹)中创建了一个名为“example-fancybox-photos.tpl.php”的tpl
<pre><?php print var_dump($infosPhoto); ?></pre>
结果为NULL
我做了一些研究,但我不明白为什么变量仍然是NULL。
感谢您的帮助!
答案 0 :(得分:0)
您已通过$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; ?>
答案 1 :(得分:0)
我终于设法从模块到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。我终于在templates文件夹中创建了一个名为“example_fancybox_photos.tpl.php”的tpl(在MODULE(示例)文件夹中)
问题在于: - tpl没有以相同的方式命名,而是使用破折号而不是下划线 - tpl位于主题的模板文件夹中,而不是模块