我正在运行一个非常大的drupal 7网站。
我想通过用标签包装每个块内容来实现对块的esi支持。
现在我可以使用theme_preprocess或hook_block_view_alter来做到这一点,但这只适用于传递给drupal模板的块“content”变量是一个字符串。如果该变量是一个数组,那么将它包装在那些标签中是不可能的,因为这个数组在模板中被解析。
所以我能让它工作的唯一方法是从模板返回块值之后。但我不认为该死的drupal甚至不支持...在没有破解核心并在模板包含之前和之后输出标签。 但我真的不希望那样......所以有人知道我怎么能够实现这个目标呢?
非常感谢!
答案 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渲染数组,因此这可以解决问题。