You are here

public function ViewUI::getDisplayTabs in Views (for Drupal 7) 8.3

Adds tabs for navigating across Displays when editing a View.

This function can be called from hook_menu_local_tasks_alter() to implement these tabs as secondary local tasks, or it can be called from elsewhere if having them as secondary local tasks isn't desired. The caller is responsible for setting the active tab's #active property to TRUE.

Parameters

$display_id: The display_id which is edited on the current request.

2 calls to ViewUI::getDisplayTabs()
ViewUI::getDisplayEditPage in views_ui/lib/Drupal/views_ui/ViewUI.php
Helper function to return the used display_id for the edit page
ViewUI::renderDisplayTop in views_ui/lib/Drupal/views_ui/ViewUI.php
Render the top of the display so it can be updated during ajax operations.

File

views_ui/lib/Drupal/views_ui/ViewUI.php, line 480
Definition of Drupal\views_ui\ViewUI.

Class

ViewUI
Stores UI related temporary settings.

Namespace

Drupal\views_ui

Code

public function getDisplayTabs($display_id = NULL) {
  $tabs = array();

  // Create a tab for each display.
  uasort($this->storage->display, array(
    'static',
    'sortPosition',
  ));
  foreach ($this->storage->display as $id => $display) {
    $tabs[$id] = array(
      '#theme' => 'menu_local_task',
      '#link' => array(
        'title' => $this
          ->getDisplayLabel($id),
        'href' => 'admin/structure/views/view/' . $this->storage->name . '/edit/' . $id,
        'localized_options' => array(),
      ),
    );
    if (!empty($display['deleted'])) {
      $tabs[$id]['#link']['localized_options']['attributes']['class'][] = 'views-display-deleted-link';
    }
    if (isset($display['display_options']['enabled']) && !$display['display_options']['enabled']) {
      $tabs[$id]['#link']['localized_options']['attributes']['class'][] = 'views-display-disabled-link';
    }
  }

  // If the default display isn't supposed to be shown, don't display its tab, unless it's the only display.
  if (!$this
    ->isDefaultDisplayShown() && $display_id != 'default' && count($tabs) > 1) {
    $tabs['default']['#access'] = FALSE;
  }

  // Mark the display tab as red to show validation errors.
  $this
    ->validate();
  foreach ($this->storage->display as $id => $display) {
    if (!empty($this->display_errors[$id])) {

      // Always show the tab.
      $tabs[$id]['#access'] = TRUE;

      // Add a class to mark the error and a title to make a hover tip.
      $tabs[$id]['#link']['localized_options']['attributes']['class'][] = 'error';
      $tabs[$id]['#link']['localized_options']['attributes']['title'] = t('This display has one or more validation errors; please review it.');
    }
  }
  return $tabs;
}