「node.tpl.php」などのテンプレートに直接ブロックを表示する方法はいくつかあります。
「サイト構築 > ブロック」で追加したカスタムブロックでは主に下記の3つの方法があります。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
//ブロックID = 1
 
$block = block_custom_block_get(1);
$content = $block['body'];
print $content;
 
//または
 
$block = block_load('block', 1);
$block_render = _block_render_blocks(array($block));
$block_array = _block_get_renderable_array($block_render);
$block_content = drupal_render($block_array);
print $block_content;
 
//または
 
$block = module_invoke('block', 'block_view', 1);
print render($block['content']);
?>

最初の「block_custom_block_get()」はブロックIDを引数に渡して、ブロックの情報を取得します。
2番目の「block_load()」はDrupal 7から導入された機能で、やや冗長になってしまい、あまり使いやすくはありません。
3番目の「module_invoke()」はモジュールとしてのblockとして情報を取得します。
2番目と3番目に関してはカスタムブロックのほかに、下記に記述するViewsなどのモジュールでも利用できます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
//モジュール = views
//viewsの名前 = test
//ブロックid = block
 
$block = block_load('views', 'test-block');
$block_render = _block_render_blocks(array($block));
$block_array = _block_get_renderable_array($block_render);
$output = drupal_render($block_array);
print $output;
 
//または
 
$block = module_invoke('views', 'block_view', 'test-block');
print render($block['content']);
?>

上記はViewsの場合ですが、モジュール名とブロックのデルタ名(test-block)を引数にとります。

デルタ名は「サイト構築 > ブロック」にアクセスして、該当するブロックの設定ページのアドレスから確認できます。

1
/admin/structure/block/manage/views/test-block/configure

Viewsの場合「CONTEXTUAL FILTERS」で引数を与えたい場合には、次の「views_embed_view()」で可能です。

1
2
3
4
5
6
7
8
<?php
//viewsの名前 = test
//ブロックid = block
//引数 = 1 (nidなど)
 
$block = views_embed_view('test', 'block', 1);
print render($block);
?>

Viewsの場合であれば、この方法が最もシンプルで利便性が高いです。