嵌入块的任何地方发生故障,在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');
答
的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;
}
谢谢。我知道有人知道它。只需要使用“render”或“drupal_render”使其工作,否则我会得到一个空数组。你知道在这种情况下使用“render”还是“drupal_render”?再次感谢 – swan 2010-12-21 18:25:32
啊,在D7默认使用render()。 – 2010-12-21 18:47:28