2013-02-12 80 views
1

這是我在這裏的第一個問題 - 儘管我已經使用它多年供參考 - 所以,請原諒我,如果這是微不足道的/已經回答,但我wasn無法找到解決方案。添加額外的內容/標記到drupal渲染數組

我有一個渲染數組被返回到塊視圖數組的'內容'屬性。我現在只是回來一張桌子。

<?php 
$data = array(
'#markup' => theme('table', array('header' => $header, 'rows' => $rows)), 
); 

return $data; 
?> 

我想要做的是在開始時添加額外的標記。我嘗試添加'#prefix'屬性,但結果並不如預期;我最終用HTML以外的塊。任何我認爲會起作用的東西似乎會導致PHP錯誤或者什麼也不做。

回答

3

在#prefix中使用HTML標記時,它們應該用#suffix關閉。 您是否記得關閉#prefix中的內容?

像這樣:

$data = array(
    '#type' => 'markup', 
    '#prefix' => '<div>', 
    '#markup' => theme('table', array('header' => $header, 'rows' => $rows)), 
    '#suffix' => '</div>', 
); 

編輯

爲了控制輸出爲HTML而不是呈現陣列的一個可以使用hook_block_view()鉤喂$塊[ '內容']用純HTML而不是渲染數組。 According to the documentation $ block ['content']可以處理這兩種類型的輸入。

function modulename_block_view($delta='') { 
    $block = array(); 

    switch($delta) { 
    case 'block_name' : 
     $block['content'] = '<div>Content before</div>'; 
     $block['content'] .= theme('table', array('header' => $header, 'rows' => $rows)); 
     $block['content'] .= '<div>Content after</div>'; 
    break; 
    } 

    return $block; 
} 

如果你不想使用塊視圖鉤我想你可以渲染渲染陣列,以這種方式來代替:

$render_array = array(
    '#type' => 'markup', 
    '#markup' => theme('table', array('header' => $header, 'rows' => $rows)), 
); 

$before = '<div>Content before</div>'; 
$after = '<div>Content after</div>'; 
$data = $before.render($render_array).$after; 
return $data; 

的參考見render()。 還請記住清除您的緩存,如this answer中所述。

+1

這並不能真正回答我的問題。我明白你在說什麼,但我試圖用前綴來達到不同的目的;目的是我需要幫助:添加更多的HTML到塊,除了主題呈現表。儘管如此,我很欣賞這一努力。 我想要做的是,例如在塊的表格之前或之後添加一些文本。 – UnsettlingTrend 2013-02-14 18:53:04

+0

啊,我明白了。 - 我編輯了我的答案,試圖反映你的細化。 – Larpon 2013-02-26 14:43:32