在Drupal 7中,如何获取页面上使用的所有块的列表?

Ada*_*man 3 drupal drupal-7 drupal-modules drupal-blocks

我正在构建一个模块,以块的形式管理广告单元,所有这些都需要彼此了解并传递信息.

因此,我需要找到一个简单的钩子或其他函数来获取将在页面上使用的每个块的列表,因此我可以确定知道页面上的整个广告单元列表.

我已经尝试过hook_block_list_alter()但是这似乎返回了我的Drupal安装中存在的块的整个列表,没有指定实际上将在这个页面上呈现哪些块.

所以,现在我该怎么办?

Cli*_*ive 5

我认为这与订单有关hook_block_list_alter(),但我不完全确定.无论哪种方式,以下代码将为您提供当前页面上下文中所有块的列表.一定不要把它放在一个hook_block_list_alter()函数中,否则你会得到一个由无限嵌套引起的异常.

global $theme;
$all_regions = system_region_list($theme);
$blocks = array();
foreach (array_keys($all_regions) as $region) {
  $blocks += block_list($region);
}
Run Code Online (Sandbox Code Playgroud)

如果您只需要特定区域中的块,则可以放弃上面的大部分代码,并且只需:

$blocks = block_list('region_name');
Run Code Online (Sandbox Code Playgroud)