2010-12-21 9 views
2

drupalのに失敗し、私は(ログイン)を配置することができ、これにどこでもブロックするために使用しました:埋め込みブロックはどこでもそれは私がDrupalの6でのDrupal 7でいじってきた一週間をされている7

$block = module_invoke('user', 'block', 'view', 0); 
$vars['login'] = $block['content']; 

私はデルタを変更し、 '0' のDrupal 7用:

$block = module_invoke('user', 'block', 'view', 'login'); // I have changed from 0 to 'login' for delta at drupal 7 
$vars['login'] = $block['content']; 

どちらの結果を致命的なエラーが発生。私がmodule_invokeで気付いていない変更はありますか?具体的な変更はありませんhttp://api.drupal.org/api/drupal/includes--module.inc/function/module_invoke/7

ご意見をいただければ幸いです。

$block = module_invoke('user', 'block_view', 'login'); 
$vars['login'] = $block['content']; 

または、なぜ直接フォームを使用しない:

$vars['login'] = drupal_get_form('user_login_block'); 

答えて

6

hook_block($ OPは)Drupalの7トライ中)(hook_block_opに変更されました最終出力まで配列をレンダリングするので、コンテンツに対するより高度な制御が可能になります。最終出力を得るには、render()関数を使用します。 Simples。

<?php 
       $block = module_invoke('user', 'block_view', 'login'); 
       print render($block); 
    ?> 
+0

ありがとうございます。誰かがそれを知っていたのを知っています。 "render"または "drupal_render"を使用するだけで動作させる必要があります。それ以外の場合は空の配列が返されます。この場合、レンダリングするか、または「drupal_render」を使用するかを知っていますか?ありがとうございました – swan

+0

ああ、D7のデフォルトではrender()を使用してください。 –

2

Drupalの7は現在のすべてのオブジェクトを保持します

+0

はい、素敵なdrupal 7.ありがとう – swan

1

Drupalテーマを尊重した、より良い解決策。

function block_render($module, $block_id) { 
    $block = block_load($module, $block_id); 
    $block_content = _block_render_blocks(array($block)); 
    $build = _block_get_renderable_array($block_content); 
    $block_rendered = drupal_render($build); 
    return $block_rendered; 
} 
関連する問題