You are here

function global_filter_preprocess in Views Global Filter 7

Same name and namespace in other branches
  1. 8 global_filter.module \global_filter_preprocess()

Implements MODULE_preprocess().

Adds classes to each page's <body> tag reflecting the values of the global filters currently set. This alllows us to affect the rendering of various elements on the page through CSS, e.g., to display or hide elements based on the current value of a global filter.

File

./global_filter.module, line 570
global_filter.module

Code

function global_filter_preprocess(&$variables, $hook) {
  if ($hook == 'html') {
    $filter_names = global_filter_active_filter_names(FALSE);
    if (!empty($filter_names)) {
      $gf_classes = array(
        drupal_html_class('gf'),
      );
      $filters = global_filter_get_session_value();
      foreach ($filter_names as $name) {

        // Include filter name by itself as a class so that selectors
        // can be targeted on the mere presence of a global filter block.
        $gf_classes[] = drupal_html_class($name);
        if (isset($filters[$name])) {

          // Filter is visible AND is set.
          if (is_object($filters[$name])) {
            $gf_classes[] = drupal_html_class($name) . '-' . implode('-', (array) $filters[$name]);
            continue;
          }
          if (is_array($filters[$name])) {
            if (count($filters[$name]) > 1) {
              asort($filters[$name]);
              $value = implode('-', $filters[$name]);
            }
            else {
              $value = reset($filters[$name]);
            }
          }
          else {
            $value = $filters[$name];
          }

          // Note that value may be numeric so must be preceded by letters to
          // be valid CSS.
          $gf_classes[] = drupal_html_class("{$name}-{$value}");
        }
      }
      $variables['classes_array'] = array_merge($variables['classes_array'], $gf_classes);
    }
  }
}