用php改变整个块html

时间:2012-02-23 00:55:34

标签: php drupal drupal-7

我正在运行一个非常大的drupal 7网站。

我想通过用标签包装每个块内容来实现对块的esi支持。

现在我可以使用theme_preprocess或hook_block_view_alter来做到这一点,但这只适用于传递给drupal模板的块“content”变量是一个字符串。如果该变量是一个数组,那么将它包装在那些标签中是不可能的,因为这个数组在模板中被解析。

所以我能让它工作的唯一方法是从模板返回块值之后。但我不认为该死的drupal甚至不支持...在没有破解核心并在模板包含之前和之后输出标签。 但我真的不希望那样......所以有人知道我怎么能够实现这个目标呢?

非常感谢!

1 个答案:

答案 0 :(得分:2)

如果块内容是一个数组,您可以向其添加#prefix#suffix

function mymodule_block_view_alter(&$data, $block) {
  if (is_array($data['content']) {
    $data['content']['#prefix'] = '<div class="my-class">';
    $data['content']['#suffix'] = '</div>';
  }
  else {
    $data['content'] = '<div class="my-class">' . $data['content'] . '</div>';
  }
}

#prefix#suffix将通过render()(或drupal_render())传递任何Drupal渲染数组,因此这可以解决问题。