UPD. Простейшее решение обнаружилось в комментариях. Написанное в посте - не самый простой способ. Но возможно пригодится для решения других задач, связанных с очередностью выводов блоков.
6-ка. Простая задачка: дизайнер сделал градиентный вертикальный фон страницы, и в верхних областях сайдбаров фоновая картинка блоков по его макету отличается от нижележащих (иначе они будут плохо гармонировать с фоном). То есть, для самых верхних блоков в регионе однозначно нужен дополнительный CSS класс.
Можно, конечно использовать модуль BlockClass для ручной привязки дополнительных классов к отдельным блокам, но заказчика пугают вещи вроде идентификаторов блоков и это не самый гибкий подход (тем более, что у него действительно есть необходимость довольно часто перемещать блоки).
Итак, копнул theme.inc, нашёл theme_blocks():
01519 $output = '';
01520
01521 if ($list = block_list($region)) {
01522 foreach ($list as $key => $block) {
01523 // $key == <i>module</i>_<i>delta</i>
01524 $output .= theme('block', $block);
01525 }
01526 }
01527
01528 // Add any content assigned to this region through drupal_set_content() calls.
01529 $output .= drupal_get_content($region);
01530
01531 return $output;
01532 }
Переопределяю эту функцию в своём template.php с добавлением единственной строки:
$output = '';
if ($list = block_list($region)) {
// вот эту самую строчку нужно добавить:
$list[key($list)] -> top = true;
foreach ($list as $key => $block) {
// $key == <i>module</i>_<i>delta</i>
$output .= theme('block', $block);
}
}
// Add any content assigned to this region through drupal_set_content() calls.
$output .= drupal_get_content($region);
return $output;
}
Топаю в шаблон блока block.tpl.php и нахожу div, открывающий блок:
Добавляю незаметную капельку кода после class="block block-(module_name)":
<div id="block-<?php print $block->module .'-'. $block->delta; ?>" class="block block-<?php print $block->module ?><?php isset($block->top) ? print ' top' : '' ;?>">
Очищаю кэш темы. Теперь все самые верхние блоки во всех регионах дают вывод:
<div id="block-block-4" class="block block-block top">
В то время, как все нижележащие блоки молча им завидуют, потому что у них такого нет и никогда не будет:
<div id="block-block-4" class="block block-block">
Теперь можно идти в CSS и наряжать верхний блок в соответствии с макетом. В жизни так много приятных вещей.

Комментарии
Интересное решение.
Как вариант — можно с помощью jQuery селектить вырхний блок и ассигновать ему нужный класс. Проще, но при выкл. js, разумеется, не будет работать )
Приведите пример реализации, пожалуйста.
Допустим у нас есть сайдбар с некоторым количеством блоков
<div class="block">
...
</div>
<div class="block">
...
</div>
<div class="block">
...
</div>
</div>
Для того, чтоб присвоить к самому верхнему блоку класс «top» добавляем следующий js-код
$(document).ready(function(){
$('div#sidebar div.block:first').addClass('top');
});
}
Спасибо, возьму на заметку.
я чет не понял а номер блока в регионе уже не справляется с этой задачей? Поищите файлы tpl.php в ядерных модулях найдете block.tpl.php и еще много других с подробным описанием переменных, так вот в block.tpl.php есть
* - $block_id: Counter dependent on each block region.
Это номер блока в регионе
а теперь дописываете в свой block.tpl.php (после $block->module)
и получается верхний блок каждого региона с классом num-1 ничего при этом в темплейт писать ненада
В этом месте я хлопаю себя себя по лбу.
Честно: просто не знал про этот счетчик.
Отмечу в посте, что простейшее решение в вашем комментарии.