嵌入块的任何地方发生故障,在Drupal的7

问题描述:

这是一个星期,我已经使用Drupal 7玩耍了使用Drupal 6,我曾经是能够把(登录)与此随时随地阻止:嵌入块的任何地方发生故障,在Drupal的7

$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']; 

我改变增量 '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

没有特别的变化任何提示将非常感激。

hook_block($ OP)改为hook_block_op()在Drupal 7.尝试:

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

或者为什么不直接使用的形式:

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

谢谢。我知道有人知道它。只需要使用“render”或“drupal_render”使其工作,否则我会得到一个空数组。你知道在这种情况下使用“render”还是“drupal_render”?再次感谢 – swan 2010-12-21 18:25:32

+0

啊,在D7默认使用render()。 – 2010-12-21 18:47:28

的Drupal 7目前保持中的所有对象渲染数组直到最后的输出,这允许对内容进行更大程度的控制。在这种情况下得到最终输出使用render()函数。 Simples。

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

是的,可爱的drupal 7.谢谢 – swan 2011-02-24 05:43:17

更好的解决方案,它尊重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; 
}