You are here

function template_preprocess_views_view in Views (for Drupal 7) 6.2

Same name and namespace in other branches
  1. 8.3 theme/theme.inc \template_preprocess_views_view()
  2. 6.3 theme/theme.inc \template_preprocess_views_view()
  3. 7.3 theme/theme.inc \template_preprocess_views_view()

Preprocess the primary theme implementation for a view.

File

theme/theme.inc, line 40
theme.inc

Code

function template_preprocess_views_view(&$vars) {
  global $base_path;
  $view = $vars['view'];
  $vars['rows'] = !empty($view->result) || !empty($view->style_plugin->definition['even empty']) ? $view->style_plugin
    ->render($view->result) : '';
  $vars['css_name'] = views_css_safe($view->name);
  $vars['name'] = $view->name;
  $vars['display_id'] = $view->current_display;

  // Basic classes
  $vars['classes_array'] = array();
  $vars['classes_array'][] = 'view';
  $vars['classes_array'][] = 'view-' . views_css_safe($vars['name']);
  $vars['classes_array'][] = 'view-id-' . $vars['name'];
  $vars['classes_array'][] = 'view-display-id-' . $vars['display_id'];
  $css_class = $view->display_handler
    ->get_option('css_class');
  if (!empty($css_class)) {
    $vars['css_class'] = preg_replace('/[^a-zA-Z0-9- ]/', '-', $css_class);
    $vars['classes_array'][] = $vars['css_class'];
  }
  if (!$vars['rows']) {
    $vars['empty'] = $view->display_handler
      ->render_empty();
    if (!$view->display_handler
      ->get_option('header_empty')) {
      $vars['header'] = '';
    }
    if (!$view->display_handler
      ->get_option('footer_empty')) {
      $vars['footer'] = '';
    }
  }
  else {
    $vars['empty'] = '';
    $header = TRUE;
  }
  $vars['exposed'] = !empty($view->exposed_widgets) ? $view->exposed_widgets : '';
  if (!isset($vars['header'])) {
    $vars['header'] = $view->display_handler
      ->render_header();
  }
  if (!isset($vars['footer'])) {
    $vars['footer'] = $view->display_handler
      ->render_footer();
  }
  $vars['more'] = $view->display_handler
    ->render_more_link();
  $vars['feed_icon'] = !empty($view->feed_icon) ? $view->feed_icon : '';
  $vars['attachment_before'] = !empty($view->attachment_before) ? $view->attachment_before : '';
  $vars['attachment_after'] = !empty($view->attachment_after) ? $view->attachment_after : '';
  $vars['pager'] = '';
  $exposed_input = isset($view->exposed_raw_input) ? $view->exposed_raw_input : NULL;
  if ($view->display_handler
    ->render_pager()) {
    $pager_type = $view->pager['use_pager'] === 'mini' ? 'views_mini_pager' : 'pager';
    $pager_theme = views_theme_functions($pager_type, $view, $view->display_handler->display);
    $vars['pager'] = theme($pager_theme, $exposed_input, $view->pager['items_per_page'], $view->pager['element']);
  }

  // if administrator, add some links. These used to be tabs, but this is better.
  if (user_access('administer views') && module_exists('views_ui') && empty($view->hide_admin_links) && !variable_get('views_no_hover_links', FALSE)) {
    $vars['admin_links_raw'] = array(
      array(
        'title' => t('Edit'),
        'alt' => t("Edit this view"),
        'href' => "admin/build/views/edit/{$view->name}",
        'fragment' => 'views-tab-' . $view->current_display,
        'query' => drupal_get_destination(),
      ),
      array(
        'title' => t('Export'),
        'alt' => t("Export this view"),
        'href' => "admin/build/views/export/{$view->name}",
      ),
      array(
        'title' => t('Clone'),
        'alt' => t("Create a copy of this view"),
        'href' => "admin/build/views/clone/{$view->name}",
      ),
    );
    drupal_alter('views_admin_links', $vars['admin_links_raw'], $view);
    $vars['admin_links'] = theme('links', $vars['admin_links_raw']);
  }
  else {
    $vars['admin_links'] = '';
    $vars['admin_links_raw'] = array();
  }

  // Our JavaScript needs to have some means to find the HTML belonging to this
  // view.
  //
  // It is true that the DIV wrapper has classes denoting the name of the view
  // and its display ID, but this is not enough to unequivocally match a view
  // with its HTML, because one view may appear several times on the page. So
  // we set up a running counter, $dom_id, to issue a "unique" identifier for
  // each view. This identifier is written to both Drupal.settings and the DIV
  // wrapper.
  static $dom_id = 1;
  $vars['dom_id'] = !empty($view->dom_id) ? $view->dom_id : $dom_id++;
  $vars['classes_array'][] = 'view-dom-id-' . $vars['dom_id'];

  // If using AJAX, send identifying data about this view.
  if ($view->use_ajax) {
    $settings = array(
      'views' => array(
        'ajax_path' => url('views/ajax'),
        'ajaxViews' => array(
          array(
            'view_name' => $view->name,
            'view_display_id' => $view->current_display,
            'view_args' => check_plain(implode('/', $view->args)),
            'view_path' => check_plain($_GET['q']),
            // Pass through URL to ensure we get e.g. language prefixes.
            //            'view_base_path' => isset($view->display['page']) ? substr(url($view->display['page']->display_options['path']), strlen($base_path)) : '',
            'view_base_path' => $view
              ->get_path(),
            'view_dom_id' => $vars['dom_id'],
            // To fit multiple views on a page, the programmer may have
            // overridden the display's pager_element.
            'pager_element' => $view->pager['element'],
          ),
        ),
      ),
    );
    drupal_add_js($settings, 'setting');
    views_add_js('ajax_view');
  }

  // Flatten the classes to a string for the template file.
  $vars['classes'] = implode(' ', $vars['classes_array']);
}