Drupal 7:hook_block_view()传递的数据未在区块.tpl文件中显示
解决Drupal中hook_block_view()数据无法传递到.tpl模板的问题
我来帮你梳理下问题所在,你目前的代码只完成了block的基本注册和主题声明,但缺少了核心的数据传递逻辑,而且主题定义也不完整,一步步来修正:
1. 补全hook_block_view()的实现
你还没编写message_block_view()函数,这是把数据从模块传递到模板的关键环节。这个函数需要准备好要展示的数据,然后通过主题渲染把数据绑定到模板变量上:
/** * Implements hook_block_view(). */ function message_block_view($delta = '') { $block = array(); // 匹配我们注册的block标识 if ($delta == 'message_block') { // 这里替换成你从配置表单获取的实际数据 $config_data = variable_get('your_config_form_key', '默认消息内容'); // 将数据传递给主题模板,变量名要和后续hook_theme定义的对应 $block['content'] = array( '#theme' => 'message_block', '#message_content' => $config_data, ); } return $block; }
2. 完善hook_theme()的定义
你的主题声明缺少了变量定义,Drupal需要明确知道模板接收哪些变量,同时建议把模板文件放在模块的templates子文件夹里,结构更规范:
/** * Implements hook_theme(). */ function message_theme() { return array( 'message_block' => array( 'template' => 'templates/message-block', // 对应templates/message-block.tpl.php 'variables' => array( 'message_content' => '', // 定义模板要接收的变量,设置默认空值 ), ), ); }
3. 模板文件的命名与内容
确保你的模板文件名和hook_theme里的template值严格对应,比如上面的配置对应模块目录下的templates/message-block.tpl.php,文件内容里要正确输出变量:
<?php /** * @file * 消息区块的模板文件 */ ?> <div class="message-block"> <?php print $message_content; ?> <!-- 输出传递过来的配置数据 --> </div>
4. 关键收尾:清除Drupal缓存
Drupal会缓存block和主题的定义,所以修改完代码后,一定要清除站点缓存(可以通过后台「配置->性能」页面操作,或者用drush命令drush cache-clear all),否则新的代码不会生效。
最后检查要点
- 确认配置表单的数据已经正确保存到变量(可以用
variable_get测试能否获取到值) - 模板文件的路径和文件名完全匹配
hook_theme里的设置 - 缓存已经彻底清除
内容的提问来源于stack exchange,提问作者MeltingDog
相关产品推荐
相关产品推荐

