public function FacetapiAdapter::buildRealm in Facet API 7
Same name and namespace in other branches
- 6.3 plugins/facetapi/adapter.inc \FacetapiAdapter::buildRealm()
- 7.2 plugins/facetapi/adapter.inc \FacetapiAdapter::buildRealm()
Uses each facet's widget to build the realm's render array.
This array is passed to Drupal's rendering layer for display. The widget plugins are executed to convert the base render arrays constructed by FacetapiAdapter::processFacets() to a realm specific render array.
Parameters
string $realm_name: The machine readable name of the realm.
Return value
array The realm's render array.
See also
FacetapiAdapter::processFacets()
File
- plugins/
facetapi/ adapter.inc, line 1063 - Adapter plugin and adapter related classes.
Class
- FacetapiAdapter
- Abstract class extended by Facet API adapters.
Code
public function buildRealm($realm_name) {
// Bail if realm isn't valid.
// @todo Call watchdog()?
if (!($realm = facetapi_realm_load($realm_name))) {
return array();
}
// Make sure facet builds are initialized and breadcrumb trail is set.
$this
->processFacets();
// Add JavaScript, initializes the realm specific render array.
$build = array(
'#adapter' => $this,
'#realm' => $realm,
);
// Iterate over the realm's enabled facets and build their render arrays.
foreach ($this
->getEnabledFacets($realm['name']) as $facet) {
// Continue to the next facet if this one failed its dependencies.
if (empty($this->dependenciesPassed[$facet['name']])) {
continue;
}
// Initialize the facet's render array.
$field_alias = $facet['field alias'];
$processor = $this->processors[$facet['name']];
$facet_build = $this
->getFacet($facet)
->build($realm, $processor);
// Try to be smart when merging the render arrays. Crazy things happen
// when merging facets with the same field alias. In these instances we
// want to merge only the values.
foreach (element_children($facet_build) as $child) {
// Bail if there is nothing to render.
if (!element_children($facet_build[$child])) {
continue;
}
// Our attempt at merging gracefully.
if (!isset($build[$child])) {
$build = array_merge_recursive($build, $facet_build);
}
else {
if (isset($build[$child][$field_alias]) && isset($facet_build[$child][$field_alias])) {
$build[$child][$field_alias] = array_merge_recursive($build[$child][$field_alias], $facet_build[$child][$field_alias]);
}
elseif (isset($build[$child]['#options']) && isset($facet_build[$child]['#options'])) {
$build[$child]['#options'] = array_merge_recursive($build[$child]['#options'], $facet_build[$child]['#options']);
}
else {
$build = array_merge_recursive($build, $facet_build);
}
}
}
}
return $build;
}