Bloques con id descriptivos

En Drupal, los bloques suelen tener id numéricos, lo que dificulta el mantenimiento de los estilos que se les aplica (el id numérico de un block puede cambiar si se lo elimina y vuelve a crear, por ejemplo). Puede ser más conveniente usar id descriptivos.
Para eso, se puede aplicar algo como:
template.php
...
/**
 * Devuelve un id textual para el block
 * http://www.bluepiccadilly.com/2011/12/give-your-drupal-blocks-more-descriptive-html-id-attribute
 */
function block_id(&$block) {
  $info = module_invoke($block->module, 'block', 'list');
  if ($info[$block->delta]['info']) {
    $block_id = 'block-' . $block->module . '-' . $info[$block->delta]['info'];
    $block_id = str_replace(array(' ', '_'), '-', strtolower($block_id));
    return preg_replace('/[^\-a-z0-9]/', '', $block_id);
  } else {
    return 'block-' . $block->module . '-' . $block->delta;
  }
}
...

block.tpl.php
<div id="<?php echo block_id($block); ?>" class="clear-block block block-<?php print $block->module ?>">

<?php if (!empty($block->subject)): ?>
  <h2><?php print $block->subject ?></h2>
<?php endif;?>

  <div class="content"><?php print $block->content ?></div>
</div>

En mi caso, usando Omega theme, no había un block.tpl.php por default, así que lo copié de themes/garland/.

Una alternativa al uso de ids descriptivos, mencionado en el punto anterior, es usar classes descriptivas. Para eso se puede usar el módulo Block Class. Clases específicas se podrán asignar en la configuración de un block. Por ejemplo, si se asigna la clase logo, luego se podrá localizar al bloque con .block.logo.

Comentarios

Entradas populares de este blog

Debug con Xdebug y Aptana (y Notepad++)

CSS3 para mejorar el breadcrumb de un tema Zen

Drupal sí, drupal no