Ran*_*ess 36 drupal drupal-7 drupal-theming
在Drupal 6中,使用以下代码将块插入模板很容易:
$block = module_invoke('views', 'block', 'view', 'block_name');
print $block['content'];
Run Code Online (Sandbox Code Playgroud)
但是,在Drupal 7中使用相同的说明似乎不起作用.我环顾四周,找不到新方法.
Drupal 7是否有一个例程,可以允许以编程方式将块插入模板或节点?
小智 85
D7:
<?php
$block = module_invoke('module_name', 'block_view', 'block_delta');
print render($block['content']);
?>
Run Code Online (Sandbox Code Playgroud)
'module_name' =模块的机器名称(即模块的文件夹名称).核心模块也是如此,例如"搜索","用户"和"评论"都可以在这里工作.
'block_delta' =块的机器名称.您可以通过访问块管理页面并编辑块来确定这是什么.例如,用于编辑webform块的URL将类似于:
Drupal 7:admin/structure/block/manage/webform/client-block-11/configure
在这个例子中,'webform'是模块的名称,'client-block-11'是块的delta.
自定义块的模块名称为"块",并且编号为delta,您也可以通过编辑块找到它.
更多信息:http://drupal.org/node/26502
Ran*_*ess 27
这似乎是将块插入到Drupal 7的模板中的解决方案,但它看起来有点笨重,我不知道对性能的影响:
$block = block_load('views', 'block_name');
$output = drupal_render(_block_get_renderable_array(_block_render_blocks(array($block))));
print $output;
Run Code Online (Sandbox Code Playgroud)
如果有人有更好的程序,请添加.
can*_*tex 20
使用wrburgess的答案,如果您的服务器使用的是较新版本的PHP,则可能会出错.
Strict warning: Only variables should be passed by reference in include()...
Run Code Online (Sandbox Code Playgroud)
这是我做的不会导致/摆脱错误.
<?php
$blockObject = block_load('views', 'block_name');
$block = _block_get_renderable_array(_block_render_blocks(array($blockObject)));
$output = drupal_render($block);
print $output;
?>
Run Code Online (Sandbox Code Playgroud)
小智 11
这项工作对我来说:
98是块的id
$block =block_load('block',98);
$output = drupal_render(_block_get_renderable_array(_block_render_blocks(array($block))));
print $output;
Run Code Online (Sandbox Code Playgroud)
刚刚在drupal 7中进行了测试,它的工作原理如下:
$bloqueServicios = module_invoke('views', 'block_view', 'servicios-blo_home');
print render($bloqueServicios);
Run Code Online (Sandbox Code Playgroud)
祝好运!
小智 5
由于某种原因render()不适合我,但这样做:
<?php
$block = module_invoke('block', 'block_view', '1');
echo $block['content'];
?>
Run Code Online (Sandbox Code Playgroud)
该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;
Run Code Online (Sandbox Code Playgroud)
因此,如果您有自定义block--your-module--delta.tpl.php模板文件,它将用于格式化块.
资料来源:http://api.drupal.org/api/drupal/includes!module.inc/function/module_invoke/7