drupal_get_region_content()
への以前の呼び出しで設定されたコンテンツを返しますが、block_page_build()をdrupal_add_region_content()
介してページにレンダリングされるブロックのコンテンツは含まれません。
Drupalソースコードで「drupal_add_region_content」を検索すると、関数が次のように呼び出されていることがわかります。
drupal_get_region_content()
install_display_output()
template_preprocess_maintenance_page()
update_task_list()
管理ページでブロックに設定するのは、ブロックがレンダリングされる領域ですが、そのコンテンツはで追加されませんdrupal_add_region_content()
。実際、上記の関数(drupal_add_region_content()
Drupalのインストールをテストするコードを除いて、を呼び出す唯一の関数)は、ブロックコンテンツのレンダリング/追加用ではありません。
独自のコードでブロックをレンダリングする必要がある場合は、で使用されているコードを確認する必要がありますblock_page_build()
。特に、これはおそらくあなたにとってより有用なコードです:
// Fetch a list of regions for the current theme.
$all_regions = system_region_list($theme);
$item = menu_get_item();
if ($item['path'] != 'admin/structure/block/demo/' . $theme) {
// Load all region content assigned via blocks.
foreach (array_keys($all_regions) as $region) {
// Assign blocks to region.
if ($blocks = block_get_blocks_by_region($region)) {
$page[$region] = $blocks;
}
}
// …
}
最初の2行は、表示されているページが、テーマ領域が配置されている場所を示すために使用されるデモページではないことを確認します。
別の方法でブロックをレンダリングする必要がある場合は、テーマ内のtheme_block()をオーバーライドするか、または(さらに可能性があります)カスタムblock.tpl.phpテンプレートファイルを作成することに関心がある可能性が高くなります。ブロックのレンダリング方法を変更する別の方法は、ブロックの前処理関数を使用することです(hook_preprocess_block())。
drupal_set_region_content()
地域コンテンツの設定に使用しましたか?