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

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