2010-09-27 40 views
0

我正在嘗試修改drupal評論表單,以便在表單上方可以顯示區域並向該區域添加更多區域(例如某些宣傳橫幅)。如何在Drupal表單中創建一個區域

我在template.php中做這個 我有一個工作的themename_comment_form函數,可以設置$form['intro']['#value']爲我想要的值。我也知道如何創建一個新的區域。

我很努力是讓該區域的價值(比如$above_comment_form),並使其可裏面themename_comment_form(類似$form['intro']['#value'] = $above_comment_form;) 我已經試過preprocess_page,preprocess_node設置像$vars['above_comment_form']=$above_comment_form,但沒有運氣的價值。

回答

2

要創建區域,您需要將其添加到模塊的.info文件中。如果你沒有任何的區域定義呢,默認是有5個可供選擇:

  • 離開
  • 內容
  • 頁腳

如果你想要添加/刪除區域,您需要編寫全部您想要的主題區域。因此,要包括你需要有這個在.info文件中的自定義區域:

regions[header] = "Header" 
regions[left] = "Left sidebar" 
regions[content] = "Content" 
regions[right] = "Right sidebar" 
regions[footer] = "Footer" 
regions[above_comment_form] = "Above the comment form" 

現在的區域僅在您page.tpl.php默認選項。您可以使用theme_blocks來獲取用戶可用區域中的塊。因此,在您preprocess_node功能,您將需要添加:

$vars['above_comment_form'] = theme('blocks', 'above_comment_form'); 

然後在你的node.tpl.php你可以這樣做:

<div id="above_comment_form"> 
    <?php print $above_comment_form; ?> 
</div> 

這應該完成你的任務。

1

區域的渲染在調用堆棧中發生得非常晚,所以大多數時候不可能將它們包含在主題函數或form_alter之類的東西中。

但是可以渲染這些單獨的塊,所以如果你希望增加使用類似的特定塊:

$block = module_invoke('block', 'block', 'view', 26); 
print $block['content']; 

將在主題功能和模板。我試着做一些相似的事情,在頁面渲染中深入挖掘以尋找渲染區域的函數,這是不可能的,或者不值得嘗試在堆棧中更早地渲染區域。

相關問題