2011-09-30 66 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的一般文檔非常糟糕,我可以說沒有任何浮動,所以我在深層有效。 ;) –

相關問題