2010-12-21 63 views
2

這是一個星期,我已經使用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

沒有特別的變化任何提示將非常感激。

回答

6

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

2

的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

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; 
}