【问题标题】:A block changes its ID when moved between regions?块在区域之间移动时会更改其 ID?
【发布时间】:2011-09-30 11:13:59
【问题描述】:

在 Drupal 6 下,我有一个自定义块,我已将其命名并放置在自定义的右侧边栏区域中。这个块的 ID(我从 block.tpl.php 发现的,来自 $block_id 辅助变量)是 7。

我正在覆盖这个块的输出,因为它显示了一个视图,我需要更改标记;我在template.php 中有一个名为myTheme_preprocess_block() 的预处理函数,用于搜索块的唯一ID:

myTheme_preprocess_block(&$vars) {

    $this_block_id = $vars['id']; /* region-independent ID (for reliability) */
    $vars['template_files'] = array();

    switch ($this_block_id) {

        case 7:
            $vars['template_files'][] = 'block-my-override-template';
            break;
        default:
            /* take no action */
    }
}

现在,我已将此块从右侧边栏区域(这是一个自定义区域,而不是 Garland 附带的默认区域)移动到页脚区域,该区域也具有自定义名称。突然之间,我的覆盖模板文件 block-my-override-template.tpl.php 不再被引用。

我做了一点挖掘并从block.tpl.php 中输出了唯一的块 ID,神奇地这个块已经更改它的 ID 从 7 到 13!一脸正经,一点也不逊色!将此块返回到右侧边栏区域也会将该块返回到 ID 7(并且我的所有代码都重新开始工作)。

我的问题是:如果块的“唯一”ID 在从一个区域移动到另一个区域时发生变化,我们如何唯一标识一个块?

【问题讨论】:

  • 目前我正在 Drupal 的块内创建一个唯一的文本标签,例如{JD_MY_BLOCKNAME} 然后,使用与上述类似的功能,检测这个而不是块 ID。但是看起来很麻烦。

标签: drupal-6 block drupal-theming


【解决方案1】:

如果您使用的是视图,为什么不覆盖视图的块显示而不是使用实际块?

您也可以简单地在模块中声明您的自定义块?这应该可以让您更轻松地管理块的主题方面。

【讨论】:

  • 感谢您的建议 - 下次我会尝试这些替代方法。我试图通过在 template.php 中覆盖来做“正确”的事情——Drupal 的一般文档太糟糕了,可以这么说,我实际上处于没有浮动的最深处。 ;)
猜你喜欢
  • 2021-03-17
  • 2021-04-21
  • 1970-01-01
  • 2015-02-18
  • 1970-01-01
  • 2017-12-16
  • 1970-01-01
  • 2017-12-21
  • 2023-03-15
相关资源
最近更新 更多