1

这是我在这里的第一个问题——尽管我多年来一直使用它作为参考——所以,如果这是微不足道的/已经回答的,请原谅我,但我无法找到解决方案。

我有一个渲染数组被返回到块视图数组的“内容”属性。我现在只是返回一张桌子。

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

return $data;
?>

我想做的是在开头添加额外的标记。我尝试添加“#prefix”属性,但结果不如预期;我最终得到了块外的 HTML。我认为可行的其他任何事情似乎都会导致 PHP 错误或什么都不做。

4

1 回答 1

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() 钩子为 $block['content'] 提供纯 HTML 而不是渲染数组。 根据文档, $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()以获取参考。还记得清除您的缓存,如本答案中所述。

于 2013-02-12T20:52:28.787 回答