abstract class PagerPluginBase

The base plugin to handle pager.

Pager plugins take care of everything regarding pagers, including getting and setting the total number of items to render the pager and setting the global pager arrays.

To define a pager type, extend this base class. The ViewsPluginManager (used to create views plugins objects) adds annotated discovery for pager plugins. Your pager plugin must have an annotation that includes the plugin's metadata, for example:


@ Plugin(
  id = "demo_pager",
  title = @ Translation("Display a demonstration pager"),
  help = @ Translation("Demonstrate pagination of views items."),
  theme = "views_demo_pager"
)

Remove spaces after @ in your actual plugin - these are put into this sample code so that it is not recognized as annotation.

The plugin annotation contains these components:

  • id: The unique identifier of your pager plugin.
  • title: The "full" title for your pager type; used in the views UI.
  • short_title: (optional) The "short" title for your pager type; used in the views UI when specified.
  • help: (optional) A short help string; this is displayed in the views UI.
  • theme: The theme function used to render the pager's output.

Hierarchy

Expanded class hierarchy of PagerPluginBase

See also

\Drupal\views\Plugin\ViewsPluginManager

Related topics

1 file declares its use of PagerPluginBase
DisplayUnitTest.php in drupal/core/modules/views/lib/Drupal/views/Tests/Plugin/DisplayUnitTest.php
Contains \Drupal\views\Tests\Plugin\DisplayUnitTest.

File

drupal/core/modules/views/lib/Drupal/views/Plugin/views/pager/PagerPluginBase.php, line 54
Definition of Drupal\views\Plugin\views\pager\PagerPluginBase.

Namespace

Drupal\views\Plugin\views\pager
View source
abstract class PagerPluginBase extends PluginBase {
  var $current_page = NULL;
  var $total_items = 0;

  /**
   * Overrides Drupal\views\Plugin\Plugin::$usesOptions.
   */
  protected $usesOptions = TRUE;

  /**
   * Get how many items per page this pager will display.
   *
   * All but the leanest pagers should probably return a value here, so
   * most pagers will not need to override this method.
   */
  public function getItemsPerPage() {
    return isset($this->options['items_per_page']) ? $this->options['items_per_page'] : 0;
  }

  /**
   * Set how many items per page this pager will display.
   *
   * This is mostly used for things that will override the value.
   */
  public function setItemsPerPage($items) {
    $this->options['items_per_page'] = $items;
  }

  /**
   * Get the page offset, or how many items to skip.
   *
   * Even pagers that don't actually page can skip items at the beginning,
   * so few pagers will need to override this method.
   */
  public function getOffset() {
    return isset($this->options['offset']) ? $this->options['offset'] : 0;
  }

  /**
   * Set the page offset, or how many items to skip.
   */
  public function setOffset($offset) {
    $this->options['offset'] = $offset;
  }

  /**
   * Get the current page.
   *
   * If NULL, we do not know what the current page is.
   */
  public function getCurrentPage() {
    return $this->current_page;
  }

  /**
   * Set the current page.
   *
   * @param $number
   *   If provided, the page number will be set to this. If NOT provided,
   *   the page number will be set from the global page array.
   */
  public function setCurrentPage($number = NULL) {
    if (!is_numeric($number) || $number < 0) {
      $number = 0;
    }
    $this->current_page = $number;
  }

  /**
   * Get the total number of items.
   *
   * If NULL, we do not yet know what the total number of items are.
   */
  public function getTotalItems() {
    return $this->total_items;
  }

  /**
   * Get the pager id, if it exists
   */
  public function getPagerId() {
    return isset($this->options['id']) ? $this->options['id'] : 0;
  }

  /**
   * Provide the default form form for validating options
   */
  public function validateOptionsForm(&$form, &$form_state) {
  }

  /**
   * Provide the default form form for submitting options
   */
  public function submitOptionsForm(&$form, &$form_state) {
  }

  /**
   * Return a string to display as the clickable title for the
   * pager plugin.
   */
  public function summaryTitle() {
    return t('Unknown');
  }

  /**
   * Determine if this pager actually uses a pager.
   *
   * Only a couple of very specific pagers will set this to false.
   */
  public function usePager() {
    return TRUE;
  }

  /**
   * Determine if a pager needs a count query.
   *
   * If a pager needs a count query, a simple query
   */
  public function useCountQuery() {
    return TRUE;
  }

  /**
   * Execute the count query, which will be done just prior to the query
   * itself being executed.
   */
  public function executeCountQuery(&$count_query) {
    $this->total_items = $count_query
      ->execute()
      ->fetchField();
    if (!empty($this->options['offset'])) {
      $this->total_items -= $this->options['offset'];
    }
    $this
      ->updatePageInfo();
    return $this->total_items;
  }

  /**
   * If there are pagers that need global values set, this method can
   * be used to set them. It will be called when the count query is run.
   */
  public function updatePageInfo() {
  }

  /**
   * Modify the query for paging
   *
   * This is called during the build phase and can directly modify the query.
   */
  public function query() {
  }

  /**
   * Perform any needed actions just prior to the query executing.
   */
  public function preExecute(&$query) {
  }

  /**
   * Perform any needed actions just after the query executing.
   */
  public function postExecute(&$result) {
  }

  /**
   * Perform any needed actions just before rendering.
   */
  function pre_render(&$result) {
  }

  /**
   * Render the pager.
   *
   * Called during the view render process, this will render the
   * pager.
   *
   * @param $input
   *   Any extra GET parameters that should be retained, such as exposed
   *   input.
   */
  function render($input) {
  }

  /**
   * Determine if there are more records available.
   *
   * This is primarily used to control the display of a more link.
   */
  public function hasMoreRecords() {
    return $this
      ->getItemsPerPage() && $this->total_items > (intval($this->current_page) + 1) * $this
      ->getItemsPerPage();
  }
  public function exposedFormAlter(&$form, &$form_state) {
  }
  public function exposedFormValidate(&$form, &$form_state) {
  }
  public function exposedFormSubmit(&$form, &$form_state, &$exclude) {
  }
  public function usesExposed() {
    return FALSE;
  }
  protected function itemsPerPageExposed() {
    return FALSE;
  }
  protected function isOffsetExposed() {
    return FALSE;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
ContainerFactoryPluginBase::create public static function Creates an instance of the plugin. Overrides ContainerFactoryPluginInterface::create 11
PagerPluginBase::$current_page property
PagerPluginBase::$total_items property
PagerPluginBase::$usesOptions protected property Overrides Drupal\views\Plugin\Plugin::$usesOptions. Overrides PluginBase::$usesOptions
PagerPluginBase::executeCountQuery public function Execute the count query, which will be done just prior to the query itself being executed. 1
PagerPluginBase::exposedFormAlter public function 1
PagerPluginBase::exposedFormSubmit public function
PagerPluginBase::exposedFormValidate public function 1
PagerPluginBase::getCurrentPage public function Get the current page.
PagerPluginBase::getItemsPerPage public function Get how many items per page this pager will display. 1
PagerPluginBase::getOffset public function Get the page offset, or how many items to skip.
PagerPluginBase::getPagerId public function Get the pager id, if it exists
PagerPluginBase::getTotalItems public function Get the total number of items.
PagerPluginBase::hasMoreRecords public function Determine if there are more records available.
PagerPluginBase::isOffsetExposed protected function 1
PagerPluginBase::itemsPerPageExposed protected function 1
PagerPluginBase::postExecute public function Perform any needed actions just after the query executing. 2
PagerPluginBase::preExecute public function Perform any needed actions just prior to the query executing.
PagerPluginBase::pre_render function Perform any needed actions just before rendering.
PagerPluginBase::query public function Modify the query for paging Overrides PluginBase::query 3
PagerPluginBase::render function Render the pager. 2
PagerPluginBase::setCurrentPage public function Set the current page. 1
PagerPluginBase::setItemsPerPage public function Set how many items per page this pager will display.
PagerPluginBase::setOffset public function Set the page offset, or how many items to skip.
PagerPluginBase::submitOptionsForm public function Provide the default form form for submitting options Overrides PluginBase::submitOptionsForm
PagerPluginBase::summaryTitle public function Return a string to display as the clickable title for the pager plugin. Overrides PluginBase::summaryTitle 4
PagerPluginBase::updatePageInfo public function If there are pagers that need global values set, this method can be used to set them. It will be called when the count query is run. 1
PagerPluginBase::useCountQuery public function Determine if a pager needs a count query. 3
PagerPluginBase::usePager public function Determine if this pager actually uses a pager. 2
PagerPluginBase::usesExposed public function 1
PagerPluginBase::validateOptionsForm public function Provide the default form form for validating options Overrides PluginBase::validateOptionsForm 1
PluginBase::$configuration protected property Configuration information passed into the plugin. 1
PluginBase::$definition public property Plugins's definition
PluginBase::$displayHandler public property The display object this plugin is for.
PluginBase::$options public property Options for this plugin will be held here.
PluginBase::$pluginDefinition protected property The plugin implementation definition.
PluginBase::$pluginId protected property The plugin_id.
PluginBase::$view public property The top object of a view. 1
PluginBase::buildOptionsForm public function Provide a form to edit options for this plugin. 15
PluginBase::defineOptions protected function Information about options for all kinds of purposes will be held here. @code 'option_name' => array( 14
PluginBase::destroy public function Clears a plugin. 2
PluginBase::getAvailableGlobalTokens public function Returns an array of available token replacements.
PluginBase::getPluginDefinition public function Returns the definition of the plugin implementation. Overrides PluginInspectionInterface::getPluginDefinition
PluginBase::getPluginId public function Returns the plugin_id of the plugin instance. Overrides PluginInspectionInterface::getPluginId
PluginBase::globalTokenForm public function Adds elements for available core tokens to a form.
PluginBase::globalTokenReplace public function Returns a string with any core tokens replaced.
PluginBase::init public function Initialize the plugin. 8
PluginBase::pluginTitle public function Return the human readable name of the display.
PluginBase::setOptionDefaults protected function Fills up the options of the plugin with defaults.
PluginBase::themeFunctions public function Provide a full list of possible theme templates used by this style. 1
PluginBase::unpackOptions public function Unpack options over our existing defaults, drilling down into arrays so that defaults don't get totally blown away.
PluginBase::usesOptions public function Returns the usesOptions property. 8
PluginBase::validate public function Validate that the plugin is correct and can be saved. 4
PluginBase::__construct public function Constructs a Plugin object. Overrides PluginBase::__construct