【发布时间】: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