在drupal 7中嵌入块无论如何都会失败

时间:2010-12-21 12:00:58

标签: drupal drupal-blocks

我用drupal 7玩了一个星期。使用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

没有具体变化

任何提示都会非常感激。

3 个答案:

答案 0 :(得分: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');

答案 1 :(得分:2)

Drupal 7将所有对象保留在渲染数组中,直到最后一次输出,这样可以更好地控制内容。在哪种情况下获取最终输出使用render()函数。 Simples。

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

答案 2 :(得分: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;
}