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:
Expanded class hierarchy of PagerPluginBase
\Drupal\views\Plugin\ViewsPluginManager
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;
}
}
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
PagerPluginBase:: |
function | Perform any needed actions just before rendering. | ||
PagerPluginBase:: |
function | Render the pager. | 2 | |
PagerPluginBase:: |
property | |||
PagerPluginBase:: |
property | |||
PagerPluginBase:: |
protected | function | 1 | |
PagerPluginBase:: |
protected | function | 1 | |
PluginBase:: |
protected | function | Information about options for all kinds of purposes will be held here. @code 'option_name' => array( | 14 |
PluginBase:: |
protected | function | Fills up the options of the plugin with defaults. | |
PagerPluginBase:: |
protected | property |
Overrides Drupal\views\Plugin\Plugin::$usesOptions. Overrides PluginBase:: |
|
PluginBase:: |
protected | property | The plugin_id. | |
PluginBase:: |
protected | property | The plugin implementation definition. | |
PluginBase:: |
protected | property | Configuration information passed into the plugin. | 1 |
PagerPluginBase:: |
public | function | Get how many items per page this pager will display. | 1 |
PagerPluginBase:: |
public | function | Set how many items per page this pager will display. | |
PagerPluginBase:: |
public | function | Get the page offset, or how many items to skip. | |
PagerPluginBase:: |
public | function | Set the page offset, or how many items to skip. | |
PagerPluginBase:: |
public | function | Get the current page. | |
PagerPluginBase:: |
public | function | Set the current page. | 1 |
PagerPluginBase:: |
public | function | Get the total number of items. | |
PagerPluginBase:: |
public | function | Get the pager id, if it exists | |
PagerPluginBase:: |
public | function |
Provide the default form form for validating options Overrides PluginBase:: |
1 |
PagerPluginBase:: |
public | function |
Provide the default form form for submitting options Overrides PluginBase:: |
|
PagerPluginBase:: |
public | function |
Return a string to display as the clickable title for the
pager plugin. Overrides PluginBase:: |
4 |
PagerPluginBase:: |
public | function | Determine if this pager actually uses a pager. | 2 |
PagerPluginBase:: |
public | function | Determine if a pager needs a count query. | 3 |
PagerPluginBase:: |
public | function | Execute the count query, which will be done just prior to the query itself being executed. | 1 |
PagerPluginBase:: |
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:: |
public | function |
Modify the query for paging Overrides PluginBase:: |
3 |
PagerPluginBase:: |
public | function | Perform any needed actions just prior to the query executing. | |
PagerPluginBase:: |
public | function | Perform any needed actions just after the query executing. | 2 |
PagerPluginBase:: |
public | function | Determine if there are more records available. | |
PagerPluginBase:: |
public | function | 1 | |
PagerPluginBase:: |
public | function | 1 | |
PagerPluginBase:: |
public | function | ||
PagerPluginBase:: |
public | function | 1 | |
PluginBase:: |
public | function |
Constructs a Plugin object. Overrides PluginBase:: |
|
PluginBase:: |
public | function | Initialize the plugin. | 8 |
PluginBase:: |
public | function | Unpack options over our existing defaults, drilling down into arrays so that defaults don't get totally blown away. | |
PluginBase:: |
public | function | Clears a plugin. | 2 |
PluginBase:: |
public | function | Provide a form to edit options for this plugin. | 15 |
PluginBase:: |
public | function | Provide a full list of possible theme templates used by this style. | 1 |
PluginBase:: |
public | function | Validate that the plugin is correct and can be saved. | 4 |
PluginBase:: |
public | function | Return the human readable name of the display. | |
PluginBase:: |
public | function | Returns the usesOptions property. | 8 |
PluginBase:: |
public | function | Returns a string with any core tokens replaced. | |
PluginBase:: |
public | function | Returns an array of available token replacements. | |
PluginBase:: |
public | function | Adds elements for available core tokens to a form. | |
PluginBase:: |
public | function |
Returns the plugin_id of the plugin instance. Overrides PluginInspectionInterface:: |
|
PluginBase:: |
public | function |
Returns the definition of the plugin implementation. Overrides PluginInspectionInterface:: |
|
PluginBase:: |
public | property | Options for this plugin will be held here. | |
PluginBase:: |
public | property | The top object of a view. | 1 |
PluginBase:: |
public | property | The display object this plugin is for. | |
PluginBase:: |
public | property | Plugins's definition | |
ContainerFactoryPluginBase:: |
public static | function |
Creates an instance of the plugin. Overrides ContainerFactoryPluginInterface:: |
11 |