Изменить весь блок HTML с помощью PHP - PullRequest
0 голосов
/ 23 февраля 2012

У меня довольно большой сайт drupal 7.

Я бы хотел реализовать поддержку esi для блоков, обернув содержимое каждого блока тегами.

Теперь я могу сделать это довольно легко с theme_preprocess или hook_block_view_alter, но это работает только в том случае, если переменная «content» блока, переданная в шаблон drupal, является строкой. Например, если эта переменная является массивом, ее нельзя обернуть в эти теги, поскольку этот массив анализируется в шаблоне.

Таким образом, единственный способ заставить его работать - это получить значение блока, возвращаемое из шаблона. Но я не думаю, что проклятый drupal даже поддерживает это ... без взлома ядра и вывода тегов до и после включения шаблона. Но я действительно не хочу этого ... так у кого-нибудь есть идея, как я смогу достичь этой цели?

Большое спасибо!

1 Ответ

2 голосов
/ 23 февраля 2012

Если содержимое блока является массивом, вы можете добавить к нему #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 будут учитываться для любого массива рендеринга Drupal, когда он проходит через render() (или drupal_render()), поэтому это должно решить проблему.

...