web-dev-qa-db-ja.com

すべてのブロックをリストする関数

テーマで有効になっているすべてのブロックをリストする関数を探しています。この目的のための機能はありますか?

4

関数block_admin_display_prepare_blocks()は、この目的のためにブロックモジュール管理ページで使用される関数ですが、ドキュメント化されたAPIの一部ではないため、完全に信頼することはできません。次の行に沿ってコードが必要になります。

module_load_include('inc', 'block', 'block.admin');
global $theme_key;
$blocks = block_admin_display_prepare_blocks($theme_key);
...

これは、現在のユーザーと現在のページのブロックのみを返すblock_list()とは異なり、すべてのブロックを返します。

10

次のコードで試してみます。

global $theme;
$all_regions = system_region_list($theme);
$blocks = array();

foreach (array_keys($all_regions) as $region) {
   $blocks += block_list($region);
}
1
Oleg Videnov

私はアルフレッドアームストロングのコードを使用して、簡単で汚いテスト関数を記述しました。

  function is_block_visible($block_name) {
    module_load_include('inc', 'block', 'block.admin');
    global $theme_key;
    $blocks = block_admin_display_prepare_blocks($theme_key);
    foreach ($blocks as $block) {
      if ($block['delta'] == $block_name && $block['region'] != -1) {
        sdpm("The block '" . $block['delta'] . "' is visible in the '" . $block['region'] . "' region.");
      }
    }
  }

私がやりたいことはありますが、WSODまたは長さがゼロの配列以外は何もできません。現在のユーザーの現在のページに表示されているブロックのリストを返すblock_list()関数を使用することです。それを機能させるための助けがあれば大歓迎です。ナット

0
Nathan