【发布时间】:2011-01-16 15:20:34
【问题描述】:
在我正在创建的主题中,我想将块放置在与默认位置不同的位置。例如,将搜索块放在标题中。
有没有办法从主题中做到这一点:能够要求一个块并将其放置在某个地方?
【问题讨论】:
标签: php html drupal drupal-theming drupal-7
在我正在创建的主题中,我想将块放置在与默认位置不同的位置。例如,将搜索块放在标题中。
有没有办法从主题中做到这一点:能够要求一个块并将其放置在某个地方?
【问题讨论】:
标签: php html drupal drupal-theming drupal-7
Drupal 的主题系统足够灵活,可以准确地将页面的该部分转换为您希望块出现的区域。为此,您需要将区域添加到主题的.info 文件中,如Assigning contents to regions 所述,例如regions[foobar] = Foobar。这将使您的page.tpl.php 可以使用一个新变量$page['foobar']。然后,您可以像使用 Drupal 的 builtin 区域一样将内容分配给区域。
如果您想绕过此系统并临时显示块,请查看_block_render_blocks 如何呈现块。
【讨论】:
if 语句除了检查这是否是正确的页面,并呈现可用的内容。所以如果没有菜单,那么我就什么都不能渲染
_block_render_block 看起来像是一个用于渲染它们的内部函数,这是我不想调用的。有没有办法设置这些默认值?
_block_render_blocks 确实是内部的。指向它的链接旨在提示您如何实现自己的呈现块的函数。
admin/structure/block 中可以执行的操作吗?
它破坏了可配置块的想法,但它仍然是可能的:您必须为除允许区域之外的所有区域创建空块模板。或者您为此块提供/覆盖主题功能,并且对禁止区域不返回任何内容。
【讨论】:
在 D7 中,您可以在主题 .info 文件中添加一个占位符区域,清除缓存并将您的块放入其中,然后您可以输出该区域的内容。
print render(block_get_blocks_by_region('region_name'));
【讨论】: