1.20.x common.inc backdrop_render_cache_by_query($query, $function, $expire = CACHE_TEMPORARY, $granularity = NULL)

Prepares an element for caching based on a query.

This smart caching strategy saves Backdrop from querying and rendering to HTML when the underlying query is unchanged.

Expensive queries should use the query builder to create the query and then call this function. Executing the query and formatting results should happen in a #pre_render callback.

Parameters

SelectQuery $query: A select query object as returned by db_select().

string $function: The name of the function doing this caching. A _pre_render suffix will be added to this string and is also part of the cache key in backdrop_render_cache_set() and backdrop_render_cache_get().

int $expire: The cache expire time, passed eventually to cache()->set().

int $granularity: One or more granularity constants passed to backdrop_render_cid_parts().

Return value

A renderable array with the following keys and values::

  • #query: The passed-in $query.
  • #pre_render: $function with a _pre_render suffix.
  • #cache: An associative array prepared for backdrop_render_cache_set().

File

includes/common.inc, line 7049
Common functions that many Backdrop modules will need to reference.

Code

function backdrop_render_cache_by_query($query, $function, $expire = CACHE_TEMPORARY, $granularity = NULL) {
  $cache_keys = array_merge(array($function), backdrop_render_cid_parts($granularity));
  $query->preExecute();
  $cache_keys[] = hash('sha256', serialize(array((string) $query, $query->getArguments())));
  return array(
    '#query' => $query,
    '#pre_render' => array($function . '_pre_render'),
    '#cache' => array(
      'keys' => $cache_keys,
      'expire' => $expire,
    ),
  );
}