You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:30:15