1 view.inc view::execute($display_id = NULL)

Execute the view's query.

Parameters

string $display_id: The machine name of the display, which should be executed.

Return value

bool: Return whether the executing was successful, for example an argument could stop the process.

File

core/modules/views/includes/view.inc, line 1156
Provides the view object type and associated methods.

Class

view
An object to contain all of the data to generate a view, plus the member functions to build the view query, execute the query and render the output.

Code

function execute($display_id = NULL) {
  if (empty($this->built)) {
    if (!$this->build($display_id)) {
      return FALSE;
    }
  }

  if (!empty($this->executed)) {
    return TRUE;
  }

  // Don't allow to use deactivated displays, but display them on the live preview.
  if (!$this->display[$this->current_display]->handler->get_option('enabled') && empty($this->live_preview)) {
    $this->build_info['fail'] = TRUE;
    return FALSE;
  }

  // Let modules modify the view just prior to executing it.
  foreach (module_implements('views_pre_execute') as $module) {
    $function = $module . '_views_pre_execute';
    $function($this);
  }

  // Check for already-cached results.
  if (!empty($this->live_preview)) {
    $cache = FALSE;
  }
  else {
    $cache = $this->display_handler->get_plugin('cache');
  }
  if ($cache && $cache->cache_get('results')) {
    if ($this->query->pager->use_pager() || !empty($this->get_total_rows)) {
      $this->query->pager->total_items = $this->total_rows;
      $this->query->pager->update_page_info();
    }
  }
  else {
    $this->query->execute($this);
    // Enforce the array key rule as documented in
    // views_plugin_query::execute().
    $this->result = array_values($this->result);
    $this->_post_execute();
    if ($cache) {
      $cache->cache_set('results');
    }
  }

  // Let modules modify the view just after executing it.
  foreach (module_implements('views_post_execute') as $module) {
    $function = $module . '_views_post_execute';
    $function($this);
  }

  $this->executed = TRUE;
}