在Drupal 6中,使用以下代码轻松将块插入模板:
$block = module_invoke('views', 'block', 'view', 'block_name');
print $block['content'];
然而,在Drupal 7中使用相同的指令似乎不起作用。我找了很多地方,但找不到新方法。
Drupal 7是否有一种例程可以允许以编程方式将块插入模板或节点中?
在Drupal 6中,使用以下代码轻松将块插入模板:
$block = module_invoke('views', 'block', 'view', 'block_name');
print $block['content'];
然而,在Drupal 7中使用相同的指令似乎不起作用。我找了很多地方,但找不到新方法。
Drupal 7是否有一种例程可以允许以编程方式将块插入模板或节点中?
D7:
<?php
$block = module_invoke('module_name', 'block_view', 'block_delta');
print render($block['content']);
?>
'module_name'表示模块的机器名称(即模块文件夹的名称)。这对于核心模块也是适用的,因此例如“search”,“user”和“comment”在这里都可以使用。
'block_delta'表示块的机器名称。您可以通过访问块管理页面并编辑块来确定这一点。例如,Webform块的编辑URL可能是:
Drupal 7:admin/structure/block/manage/webform/client-block-11/configure
在此示例中,'webform'是模块的名称,'client-block-11'是块的delta。
自定义块的模块名称为“block”,delta为数字,您也可以通过编辑该块来查找。
print $block['content'];
。 - bcosynotprint render($block);
来渲染Views块,并使用print render($block['content']);
来渲染自定义块。 - Kevin Siji这似乎是将块插入Drupal 7模板的解决方案,但它看起来有些笨重,我不知道对性能的影响:
$block = block_load('views', 'block_name');
$output = drupal_render(_block_get_renderable_array(_block_render_blocks(array($block))));
print $output;
如果有更好的步骤,请添加。
使用wrburgess的答案,如果您的服务器正在使用较新版本的PHP,则可能会出现错误。
Strict warning: Only variables should be passed by reference in include()...
这就是我为了避免/消除错误所做的事情。
<?php
$blockObject = block_load('views', 'block_name');
$block = _block_get_renderable_array(_block_render_blocks(array($blockObject)));
$output = drupal_render($block);
print $output;
?>
这对我有效:
98 是该区块的编号
$block =block_load('block',98);
$output = drupal_render(_block_get_renderable_array(_block_render_blocks(array($block))));
print $output;
我在Drupal 7中进行了测试,它可以正常工作:
$bloqueServicios = module_invoke('views', 'block_view', 'servicios-blo_home');
print render($bloqueServicios);
祝你好运!
因为某些原因,render()
对我不起作用,但是下面的方法行得通:
<?php
$block = module_invoke('block', 'block_view', '1');
echo $block['content'];
?>
module_invoke()
函数有效。但是,我发现用这种方式呈现块不会使用自定义的块模板。根据您的需求,这可能是可以接受的。$raw_block = block_load('your-module', 'delta');
$rendered_block = drupal_render(_block_get_renderable_array(_block_render_blocks(array($raw_block))));
print $rendered_block;
因此,如果您有一个自定义的block--your-module--delta.tpl.php
模板文件,它将用于格式化这个区块。
来源:http://api.drupal.org/api/drupal/includes!module.inc/function/module_invoke/7
<?php print drupal_render(_block_get_renderable_array(_block_render_blocks(array(block_load('module_name', 'block_delta'))))); ?>
<?php print drupal_render(_block_get_renderable_array(_block_render_blocks(array(block_load('block', '6'))))); ?>
block_load();
)。$block = block_get_custom_block($bid);
$content = $block['body'];
$addblock = module_invoke('addthis','block_view','addthis_block');
print render($addblock['content']);
更多信息可访问 http://technarco.com/drupal/insert-block-node-or-template-drupal-7。