【问题标题】:Require and place block in a drupal theme?需要并在drupal主题中放置块?
【发布时间】:2011-01-16 15:20:34
【问题描述】:

在我正在创建的主题中,我想将块放置在与默认位置不同的位置。例如,将搜索块放在标题中。

有没有办法从主题中做到这一点:能够要求一个块并将其放置在某个地方?

【问题讨论】:

    标签: php html drupal drupal-theming drupal-7


    【解决方案1】:

    Drupal 的主题系统足够灵活,可以准确地将页面的该部分转换为您希望块出现的区域。为此,您需要将区域添加到主题的.info 文件中,如Assigning contents to regions 所述,例如regions[foobar] = Foobar。这将使您的page.tpl.php 可以使用一个新变量$page['foobar']。然后,您可以像使用 Drupal 的 builtin 区域一样将内容分配给区域。

    如果您想绕过此系统并临时显示块,请查看_block_render_blocks 如何呈现块。

    【讨论】:

    • 似乎脚本if 语句除了检查这是否是正确的页面,并呈现可用的内容。所以如果没有菜单,那么我就什么都不能渲染
    • @TheLQ:对不起,我刚刚注意到我链接到了 Drupal 4.7 和 5.x 的过程。我用 Drupal 6.x 和 7.x 的正确程序更新了我的答案。
    • 那不是我真正想要的。默认情况下,我希望搜索栏位于标题中。底部区域的 Drupal Powered By 块。用户管理块位于另一个区域。等等_block_render_block 看起来像是一个用于渲染它们的内部函数,这是我不想调用的。有没有办法设置这些默认值?
    • @TheLQ _block_render_blocks 确实是内部的。指向它的链接旨在提示您如何实现自己的呈现块的函数。
    • 我为什么要这样做?你是在告诉我没有办法以编程方式执行用户在admin/structure/block 中可以执行的操作吗?
    【解决方案2】:

    它破坏了可配置块的想法,但它仍然是可能的:您必须为除允许区域之外的所有区域创建空块模板。或者您为此块提供/覆盖主题功能,并且对禁止区域不返回任何内容。

    【讨论】:

      【解决方案3】:

      在 D7 中,您可以在主题 .info 文件中添加一个占位符区域,清除缓存并将您的块放入其中,然后您可以输出该区域的内容。

      print render(block_get_blocks_by_region('region_name'));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多