1 common.inc backdrop_render_collect_attached($elements, $return = FALSE)

Collects #attached for an element and its children into a single array.

When caching elements, it is necessary to collect all libraries, JavaScript and CSS into a single array, from both the element itself and all child elements. This allows backdrop_render() to add these back to the page when the element is returned from cache.

Parameters

$elements: The element to collect #attached from.

$return: Whether to return the attached elements and reset the internal static.

Return value

array|NULL: If $return is TRUE, the #attached array for this element and its descendants. If $return is FALSE, the collected attachments are stored internally so they do not have to be collected again.

File

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

Code

function backdrop_render_collect_attached($elements, $return = FALSE) {
  $attached = &backdrop_static(__FUNCTION__, array());

  // Collect all #attached for this element.
  if (isset($elements['#attached'])) {
    foreach ($elements['#attached'] as $key => $value) {
      if (!isset($attached[$key])) {
        $attached[$key] = array();
      }
      $attached[$key] = array_merge($attached[$key], $value);
    }
  }
  if ($children = element_children($elements)) {
    foreach ($children as $child) {
      backdrop_render_collect_attached($elements[$child]);
    }
  }

  // If this was the first call to the function, return all attached elements
  // and reset the static cache.
  if ($return) {
    $return = $attached;
    $attached = array();
    return $return;
  }
  else {
    return NULL;
  }
}