2011-09-30 35 views
1

在Drupal 6下我有一个自定义块,我已经命名并放置在一个自定义的右侧边栏区域中。这个块的ID(我从block.tpl.php$block_id帮助变量中发现)是7.在区域之间移动时,块会更改其ID?

我覆盖了这个块的输出,因为它显示一个View,我需要改变标记;我在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 */ 
    } 
} 

现在,我已经搬到从右侧栏区该块(这是一个自定义的区域,而不是默认一个与加兰一起来)到页脚区域,它也有一个自定义名称。突然,我的覆盖模板文件block-my-override-template.tpl.php不再被引用。

我做一个小小的挖掘和输出的唯一块ID从block.tpl.php内,并奇迹般地此块已改变其ID为7〜13!面对一张脸,毫不逊色!将该块返回到右侧边栏区域也会将块返回到ID 7(并且我的所有代码都会再次开始工作)。

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

+0

目前,我在Drupal的块内部创建了一个独特的文本标记,例如'{JD_MY_BLOCKNAME}',然后,使用与上述类似的功能,检测这个而不是块ID。但它似乎很繁琐。 –

回答

1

如果你使用的是视图,为什么你不要重写视图的块显示,而不是去掉实际的块?

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

+0

感谢您的建议 - 下次我会尝试这些替代方法。我试图通过在template.php中覆盖来做“正确”的事情 - Drupal的一般文档非常糟糕,我可以说没有任何浮动,所以我在深层有效。 ;) –

相关问题