2

我已经使用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 的 delta '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 回答