function FacetapiAjaxWidgetCheckboxes::buildListItems in Ajax facets 7.3
Same name and namespace in other branches
- 7 plugins/facetapi/ajax_widget_checkboxes.inc \FacetapiAjaxWidgetCheckboxes::buildListItems()
- 7.2 plugins/facetapi/ajax_widget_checkboxes.inc \FacetapiAjaxWidgetCheckboxes::buildListItems()
Transforms the render array for use with theme_item_list().
The recursion allows this function to act on the various levels of a hierarchical data set.
Parameters
array $build: The items in the facet's render array being transformed.
Return value
array The "items" parameter for theme_item_list().
File
- plugins/
facetapi/ ajax_widget_checkboxes.inc, line 81 - The facetapi_links and facetapi_checkbox_links widget plugin classes.
Class
- FacetapiAjaxWidgetCheckboxes
- Widget that renders facets as a list of clickable links.
Code
function buildListItems($build) {
$have_active = FALSE;
// Builds rows.
$items = [];
$items_count = count($build);
$active_items = [];
foreach ($build as $value => $item) {
$row = [
'class' => [],
];
$attributes = [
'class' => [
'facet-multiselect-checkbox',
],
'data-facet-value' => $value,
'data-facet-name' => rawurlencode($this->settings->facet),
'data-raw-facet-name' => $this->settings->facet,
];
// Mark as disabled if count is 0.
if ($item['#count'] == 0) {
$attributes['disabled'] = 'disabled';
$row['class'][] = 'facetapi-disabled';
}
// Respect current selection.
if (!empty($item['#active'])) {
$attributes['checked'] = 'checked';
$have_active = TRUE;
$active_items[] = $this->key . ':' . $item['#markup'];
$row['class'][] = 'facetapi-active';
}
// Show/hide counts according to the settings.
if (!empty($this->settings->settings['display_count'])) {
$item['#markup'] .= ' ' . theme('facetapi_count', [
'count' => $item['#count'],
]);
}
$checkbox = [
'#id' => $this
->getAjaxFacetsUuid($value),
'#name' => rawurlencode($this->key),
'#type' => 'checkbox',
'#title' => $item['#markup'],
'#attributes' => $attributes,
];
$row['data'] = drupal_render($checkbox);
if ($items_count == 1) {
$row['class'][] = 'single-leaf';
}
if (!empty($item['#item_children'])) {
if (!empty($item['#active']) || !empty($this->settings->settings['show_expanded'])) {
$row['class'][] = 'expanded';
$row['children'] = $this
->buildListItems($item['#item_children']);
}
else {
$row['class'][] = 'collapsed';
}
}
$items[] = $row;
}
$this->jsSettings['haveActiveSelection'] = $this->settings->settings['have_active_selection'] = $have_active;
sort($active_items);
$this->jsSettings['activeItems'] = $active_items;
// Generate reset path on server side to make possible to use aliases.
if ($have_active) {
$this->jsSettings['resetPath'] = ajax_facets_facet_build_reset_path($this->facet
->getFacet(), $this->facet
->getAdapter());
}
$facet_settings = $this->facet
->getSettings();
$this->jsSettings['limit_active_items'] = $facet_settings->settings['limit_active_items'];
return $items;
}