Hi,

Due to the nature of hook_preprocess_block(), the queries are repeated on every block, so if I have like 30 blocks it will make 30 queries, can we reduce it to only 1 query for all? This is huge in developing large sites with multiple blocks.

<?php

/*
 * Extend block's classes with any user defined classes.
 */
function block_class_preprocess_block(&$vars) {
  $block = $vars['block'];
  $classes = block_class($block);
  $vars['classes_array'] = array_merge($vars['classes_array'], explode(' ', $classes));
}
?>

My solution to just 1 query, or if you have another way to do it, please do ...

<?php
/*
 * Extend block's classes with any user defined classes.
 */
function block_class_preprocess_block(&$vars) {
    global $_block_class_blocks_classes;
    static $called_once = 0;
    $called_once++; 
  
    if ($called_once == 1) {
      $result = db_query("SELECT css_class, module, delta FROM {block_class}");
  
      while ($record = $result->fetchObject()) {
        $_block_class_blocks_classes[$record->module][$record->delta] = $record->css_class;
      }
    }  
  $block = $vars['block'];
  //$classes = block_class($block);
  if (isset($_block_class_blocks_classes[$block->module][$block->delta])) {
    $classes = $_block_class_blocks_classes[$block->module][$block->delta];  
    $vars['classes_array'] = array_merge($vars['classes_array'], explode(' ', $classes));
  }
}
?>

Comments

danielhonrade’s picture

Issue summary: View changes

added ?>

berenddeboer’s picture

Assigned: Unassigned » berenddeboer
Category: feature » task
berenddeboer’s picture

Status: Active » Closed (fixed)

Patch committed, thanks.Performance, Multiple Queries with multiple blocks on no cache blocks

berenddeboer’s picture

Issue summary: View changes

corrected grammar