在drupal 7上嵌入块anywhere失败
我和Drupal7玩了一个星期了。使用drupal 6,我过去可以使用以下命令在任何位置放置(登录)块:在drupal 7上嵌入块anywhere失败,drupal,drupal-blocks,Drupal,Drupal Blocks,我和Drupal7玩了一个星期了。使用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 = (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'];
两者都会导致致命错误。我不知道模块_invoke有什么变化?目前没有具体变化
任何提示都将不胜感激。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');
Drupal 7将所有对象保留在渲染数组中,直到最后一次输出,这允许对内容进行更大程度的控制。在这种情况下,要获得最终输出,请使用render()函数。简单
<?php
$block = module_invoke('user', 'block_view', 'login');
print render($block);
?>
更好的解决方案,它尊重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;
}
谢谢我知道有人知道。只需要使用“render”或“drupal_render”即可使其工作,否则将得到一个空数组。您知道在这种情况下使用“渲染”还是“drupal_渲染”吗?再次感谢您,在D7中默认使用render()。