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). 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/.

    Referencia: GIVE YOUR DRUPAL BLOCKS A MORE DESCRIPTIVE HTML ID ATTRIBUTE
  • 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.