2013-02-12 81 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