2

drupal 7 をいじってから 1 週間が経ちました。drupal 6 では、これを使用してどこにでも (ログイン) ブロックを配置できました。

  $block = (object) module_invoke($module, 'block', 'view', $delta);
  $block->module = $module;
  $block->delta = $delta;
  return theme('block', $block);

またはこれ:

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

Drupal 7 のデルタ '0' を変更しました。

$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に特定の変更はありません

どんなヒントでも大歓迎です。

4

3 に答える 3

6

Drupal 7 では hook_block($op) が hook_block_op() に変更されました。

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

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

$vars['login'] = drupal_get_form('user_login_block');
于 2010-12-21T18:18:25.063 に答える
2

Drupal 7 は、最後の出力まですべてのオブジェクトをレンダー配列に保持するようになりました。これにより、コンテンツに対するより高度な制御が可能になります。その場合、最終出力を取得するには render() 関数を使用します。シンプル。

   <?php
              $block = module_invoke('user', 'block_view', 'login');
              print render($block); 
    ?>
于 2011-02-16T19:21:49.230 に答える
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;
}
于 2011-06-24T13:54:57.983 に答える