Drupal → Как программно изменить порядок вывода блоков

28.05.2010

Собственно изменить порядок блоков очень просто, делается это на странице admin/build/block/list. Сложнее когда нужно изменить порядок только на определённых страницах или при определённых условиях. Например, чтобы для администратора блок с последними комментариями был в самом верху, нужно в template.php добавить:

/**
 * Переопределённая ф-я theme_blocks
 */
function phptemplate_blocks($region) {
  global $user;
  $output = '';

  if ($list = block_list($region)) {
    // dsm($list);
    if ($user->uid == 1) {
      $list['commentsblock_0']->weight = -100;
       uasort($list, '_user_sort');
    }
        
    foreach ($list as $key => $block) {
      $output .= theme('block', $block);
    }
  }

  $output .= drupal_get_content($region);
  return $output;
}

В примере, у блока с идентификатором commentsblock_0, изменяется значение свойства weight на -100, что делает его первым в списке.

Если раскомментировать строчку dsm($list); и установить модуль Devel, то можно будет узнать идентификаторы всех блоков и значения свойств weight.

P.S: не забываем, что при добавлении функций темизации, нужно сбрасывать кэш друпала.

Написанное актуально для
Drupal 6.x
Похожие записи

Комментарии

Артем
24.07.2012, 18:10

Привет.
Пытаюсь поэтому принципу изменить регион у блока, но ни как не соображу почему не срабатывает.
Подскажи пожалуйста.

Добавить комментарий