我用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
没有具体变化任何提示都会非常感激。
答案 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;
}