这是我在这里的第一个问题 - 虽然我已经多年使用它作为参考 - 所以,请原谅我,如果这是微不足道/已经回答,但我无法找到解决方案。
我有一个渲染数组返回到块视图数组的'content'属性。我现在只是回来一张桌子。
<?php
$data = array(
'#markup' => theme('table', array('header' => $header, 'rows' => $rows)),
);
return $data;
?>
我想要做的是在开头添加额外的标记。我尝试添加'#prefix'属性,但结果不符合预期;我最终得到了块外的HTML。我认为其他任何工作似乎都会导致PHP错误或者什么都不做。
答案 0 :(得分: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而不是渲染数组来提供$ block ['content']。 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中所述的缓存。