class ShowMore in Views Show More 8
The plugin to handle show more pager.
Plugin annotation
@ViewsPager(
id = "show_more",
title = @Translation("Show more pager"),
short_title = @Translation("Show more"),
help = @Translation("Paged output, show more style"),
theme = "views_show_more_pager"
)
Hierarchy
- class \Drupal\Component\Plugin\PluginBase implements DerivativeInspectionInterface, PluginInspectionInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
- class \Drupal\views\Plugin\views\PluginBase implements DependentPluginInterface, ContainerFactoryPluginInterface, TrustedCallbackInterface, ViewsPluginInterface
- class \Drupal\views\Plugin\views\pager\PagerPluginBase
- class \Drupal\views\Plugin\views\pager\SqlBase implements CacheableDependencyInterface, ContainerFactoryPluginInterface
- class \Drupal\views_show_more\Plugin\views\pager\ShowMore
- class \Drupal\views\Plugin\views\pager\SqlBase implements CacheableDependencyInterface, ContainerFactoryPluginInterface
- class \Drupal\views\Plugin\views\pager\PagerPluginBase
- class \Drupal\views\Plugin\views\PluginBase implements DependentPluginInterface, ContainerFactoryPluginInterface, TrustedCallbackInterface, ViewsPluginInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
Expanded class hierarchy of ShowMore
File
- src/
Plugin/ views/ pager/ ShowMore.php, line 21
Namespace
Drupal\views_show_more\Plugin\views\pagerView source
class ShowMore extends SqlBase {
/**
* Summary title overwrite.
*/
public function summaryTitle() {
$initial = !empty($this->options['initial']) ? $this->options['initial'] : $this->options['items_per_page'];
$offset = '';
if (!empty($this->options['offset'])) {
$offset = ', skip ' . $this->options['offset'];
}
return $this
->formatPlural($initial, 'Initial @initial item, ', 'Initial @initial items, ', [
'@initial' => $initial,
]) . $this
->formatPlural($this->options['items_per_page'], 'Per click @count item', 'Per click @count items', [
'@count' => $this->options['items_per_page'],
]) . $offset;
}
/**
* Options definition overwrite.
*/
protected function defineOptions() {
$options = parent::defineOptions();
$options['result_display_method'] = [
'default' => 'append',
];
$options['initial'] = [
'default' => 0,
];
$options['show_more_text'] = [
'default' => $this
->t('Show more'),
'translatable' => TRUE,
];
$options['show_more_empty_text'] = [
'default' => '',
'translatable' => TRUE,
];
$options['effects'] = [
'contains' => [
'type' => [
'default' => 'none',
],
'speed_type' => [
'default' => '',
],
'speed' => [
'default' => '',
],
'speed_value' => [
'default' => '',
],
'scroll_offset' => [
'default' => '50',
],
],
];
$options['advance'] = [
'contains' => [
'content_selector' => [
'default' => '',
],
'pager_selector' => [
'default' => '',
],
],
];
return $options;
}
/**
* Options form overwrite.
*/
public function buildOptionsForm(&$form, FormStateInterface $form_state) {
parent::buildOptionsForm($form, $form_state);
$exclude = [
'total_pages',
'expose',
'tags',
];
foreach ($exclude as $ex) {
unset($form[$ex]['#title']);
unset($form[$ex]['#description']);
$form[$ex]['#attributes'] = [
'class' => [
'visually-hidden',
],
];
}
// Result display method.
$form['result_display_method'] = [
'#type' => 'select',
'#title' => $this
->t('Result display method'),
'#description' => $this
->t('<strong>Append</strong> result display method append the new content after the existing content on the page in ajax mode and in no-ajax mode replace the content by page refresh. <strong>Replace</strong> result display method replace the content with new content both in ajax and no-ajax mode. In no-ajax mode it refresh the page.'),
'#options' => [
'append' => $this
->t('Append'),
'html' => $this
->t('Replace'),
],
'#default_value' => $this->options['result_display_method'] ? $this->options['result_display_method'] : 'append',
'#weight' => 0,
];
// Option for users to specify the text used on the 'show more' button.
$form['show_more_text'] = [
'#type' => 'textfield',
'#title' => $this
->t('Show more pager link text'),
'#description' => $this
->t('Text for the button which used to load more items. Like "Show More".'),
'#default_value' => $this->options['show_more_text'] ? $this->options['show_more_text'] : $this
->t('Show more'),
'#required' => TRUE,
'#weight' => 1,
];
// Option for users to specify the text used on the 'show more' button
// when no mor result is found.
$form['show_more_empty_text'] = [
'#type' => 'textfield',
'#title' => $this
->t('Show more pager link text when empty'),
'#description' => $this
->t('Empty text when no more items exist to load. Like "No more results".'),
'#default_value' => $this->options['show_more_empty_text'] ? $this->options['show_more_empty_text'] : '',
'#weight' => 2,
];
// Initial items count.
$form['initial'] = [
'#type' => 'number',
'#title' => $this
->t('Initial items'),
'#description' => $this
->t('The number of items to display initially. Enter 0 for use same as items per page (show more click).'),
'#default_value' => $this->options['initial'] ? $this->options['initial'] : 0,
'#weight' => 3,
'#min' => 0,
];
// Twick item per page description and weight.
$form['items_per_page']['#description'] = $this
->t('The number of items to display per show more click.');
$form['items_per_page']['#weight'] = 4;
// Twick offset weight.
$form['offset']['#weight'] = 5;
// Twick pager id weight.
$form['id']['#weight'] = 5;
// Effects for loading adds new rows.
$form['effects'] = [
'#type' => 'details',
'#open' => FALSE,
'#tree' => TRUE,
'#title' => $this
->t('Animation'),
'#input' => TRUE,
'#weight' => 7,
];
$form['effects']['type'] = [
'#type' => 'select',
'#options' => [
'none' => $this
->t('None'),
'fade' => $this
->t('FadeIn'),
'scroll' => $this
->t('Scroll to New Content'),
'scroll_fade' => $this
->t('Scroll to New Content & FadeIn'),
],
'#default_vaue' => 'none',
'#title' => $this
->t('Animation Type'),
'#default_value' => $this->options['effects']['type'],
];
$form['effects']['speed_type'] = [
'#type' => 'select',
'#options' => [
'slow' => $this
->t('Slow'),
'fast' => $this
->t('Fast'),
'custom' => $this
->t('Custom'),
],
'#states' => [
'invisible' => [
':input[name="pager_options[effects][type]"]' => [
[
'value' => 'none',
],
],
],
],
'#title' => $this
->t('Animation Speed'),
'#default_value' => $this->options['effects']['speed_type'],
];
$form['effects']['speed_value'] = [
'#type' => 'number',
'#title' => $this
->t('Animation speed in ms'),
'#states' => [
'visible' => [
':input[name="pager_options[effects][speed_type]"]' => [
'value' => 'custom',
],
],
],
'#min' => 0,
'#default_value' => $this->options['effects']['speed_value'],
];
$form['effects']['scroll_offset'] = [
'#type' => 'number',
'#title' => t('Scroll Offset'),
'#states' => [
'visible' => [
':input[name="pager_options[effects][type]"]' => [
[
'value' => 'scroll',
],
[
'value' => 'scroll_fade',
],
],
],
],
'#min' => 0,
'#default_value' => $this->options['effects']['scroll_offset'],
];
// Advanced options, override default selectors.
$form['advance'] = [
'#type' => 'details',
'#open' => FALSE,
'#tree' => TRUE,
'#title' => $this
->t('Advanced Options'),
'#input' => TRUE,
'#weight' => 9,
];
// Option to specify the content_selector, which is the wrapping div for
// views rows. This allows the JS to both find new rows on next pages and
// know where to put them in the page.
$form['advance']['content_selector'] = [
'#type' => 'textfield',
'#title' => $this
->t('Content jquery selector'),
'#description' => $this
->t('jQuery selector for the rows wrapper, relative to the view container. Use when you override the views markup. Views Show More pager requires a wrapping element for the rows. Default is <strong><code>".view-content"</code></strong>.'),
'#default_value' => $this->options['advance']['content_selector'],
];
// Option to specify the pager_selector, which is the pager relative to the
// view container.
$form['advance']['pager_selector'] = [
'#type' => 'textfield',
'#title' => $this
->t('Pager jquery selector'),
'#description' => $this
->t('jQuery selector for the pager, relative to the view container. Use when you override the pager markup. Default is <strong><code>".pager-show-more"</code></strong>.'),
'#default_value' => $this->options['advance']['pager_selector'],
];
}
/**
* Options form validate.
*/
public function validateOptionsForm(&$form, FormStateInterface $form_state) {
$effect_speed = $form_state
->getValue([
'pager_options',
'effects',
'speed_type',
]);
$effect_speed_val = $form_state
->getValue([
'pager_options',
'effects',
'speed_value',
]);
if ($effect_speed == 'custom') {
if ($effect_speed_val == '') {
$form_state
->setErrorByName('pager_options][effects][speed_value', $this
->t('Animation speed is required.'));
}
else {
$form_state
->setValue([
'pager_options',
'effects',
'speed',
], $effect_speed_val);
}
}
else {
$form_state
->setValue([
'pager_options',
'effects',
'speed',
], $effect_speed);
}
}
/**
* Query overwrite.
*/
public function query() {
parent::query();
$others_page = $this->options['items_per_page'];
$limit = !empty($this->options['initial']) ? $this->options['initial'] : $others_page;
$offset = !empty($this->options['offset']) ? $this->options['offset'] : 0;
if ($this->current_page != 0) {
$offset = $limit + ($this->current_page - 1) * $others_page + $offset;
$limit = $others_page;
}
$this->view->query
->setLimit($limit);
$this->view->query
->setOffset($offset);
}
/**
* Render overwrite.
*/
public function render($input) {
$output = [
'#theme' => $this
->themeFunctions(),
'#element' => $this->options['id'],
'#parameters' => $input,
'#options' => $this->options,
];
if ($this->view->display_handler
->usesAJAX()) {
$output['#attached'] = [
'library' => [
'views_show_more/views_show_more',
],
];
}
return $output;
}
/**
* Render overwrite.
*/
public function getPagerTotal() {
if ($items_per_page = intval($this
->getItemsPerPage())) {
if ($initial_items = intval($this
->getInitial())) {
return 1 + ceil(($this->total_items - $initial_items) / $items_per_page);
}
else {
return ceil($this->total_items / $items_per_page);
}
}
else {
return 1;
}
}
/**
* Execute the count query.
*/
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;
}
/**
* Get the page initial items count.
*/
private function getInitial() {
$items_per_page = intval($this
->getItemsPerPage());
return isset($this->options['initial']) ? $this->options['initial'] : $items_per_page;
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
DependencySerializationTrait:: |
protected | property | An array of entity type IDs keyed by the property name of their storages. | |
DependencySerializationTrait:: |
protected | property | An array of service IDs keyed by property name used for serialization. | |
DependencySerializationTrait:: |
public | function | 1 | |
DependencySerializationTrait:: |
public | function | 2 | |
MessengerTrait:: |
protected | property | The messenger. | 29 |
MessengerTrait:: |
public | function | Gets the messenger. | 29 |
MessengerTrait:: |
public | function | Sets the messenger. | |
PagerPluginBase:: |
public | property | ||
PagerPluginBase:: |
public | property | ||
PagerPluginBase:: |
protected | property |
Denotes whether the plugin has an additional options form. Overrides PluginBase:: |
|
PagerPluginBase:: |
public | function | ||
PagerPluginBase:: |
public | function | Get the current page. | |
PagerPluginBase:: |
public | function | Get how many items per page this pager will display. | 1 |
PagerPluginBase:: |
public | function | Get the page offset, or how many items to skip. | |
PagerPluginBase:: |
public | function | Get the pager id, if it exists | |
PagerPluginBase:: |
public | function | Get the total number of items. | |
PagerPluginBase:: |
public | function | Determine if there are more records available. | |
PagerPluginBase:: |
public | function | Perform any needed actions just after the query executing. | 2 |
PagerPluginBase:: |
public | function | Perform any needed actions just prior to the query executing. | |
PagerPluginBase:: |
public | function | Perform any needed actions just before rendering. | |
PagerPluginBase:: |
public | function | Set how many items per page this pager will display. | |
PagerPluginBase:: |
public | function | Set the page offset, or how many items to skip. | |
PagerPluginBase:: |
public | function |
Provide the default form form for submitting options Overrides PluginBase:: |
|
PagerPluginBase:: |
public | function | Determine if a pager needs a count query. | 3 |
PagerPluginBase:: |
public | function | Determine if this pager actually uses a pager. | 2 |
PluginBase:: |
protected | property | Configuration information passed into the plugin. | 1 |
PluginBase:: |
public | property | Plugins's definition | |
PluginBase:: |
public | property | The display object this plugin is for. | |
PluginBase:: |
public | property | Options for this plugin will be held here. | |
PluginBase:: |
protected | property | The plugin implementation definition. | 1 |
PluginBase:: |
protected | property | The plugin_id. | |
PluginBase:: |
protected | property | Stores the render API renderer. | 3 |
PluginBase:: |
public | property | The top object of a view. | 1 |
PluginBase:: |
public | function |
Calculates dependencies for the configured plugin. Overrides DependentPluginInterface:: |
14 |
PluginBase:: |
constant | A string which is used to separate base plugin IDs from the derivative ID. | ||
PluginBase:: |
public | function |
Clears a plugin. Overrides ViewsPluginInterface:: |
2 |
PluginBase:: |
protected | function | Do the work to filter out stored options depending on the defined options. | |
PluginBase:: |
public | function |
Filter out stored options depending on the defined options. Overrides ViewsPluginInterface:: |
|
PluginBase:: |
public | function |
Returns an array of available token replacements. Overrides ViewsPluginInterface:: |
|
PluginBase:: |
public | function |
Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the definition of the plugin implementation. Overrides PluginInspectionInterface:: |
3 |
PluginBase:: |
public | function |
Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface:: |
|
PluginBase:: |
public | function |
Returns the plugin provider. Overrides ViewsPluginInterface:: |
|
PluginBase:: |
protected | function | Returns the render API renderer. | 1 |
PluginBase:: |
public | function |
Adds elements for available core tokens to a form. Overrides ViewsPluginInterface:: |
|
PluginBase:: |
public | function |
Returns a string with any core tokens replaced. Overrides ViewsPluginInterface:: |
|
PluginBase:: |
constant | Include entity row languages when listing languages. | ||
PluginBase:: |
constant | Include negotiated languages when listing languages. | ||
PluginBase:: |
public | function |
Initialize the plugin. Overrides ViewsPluginInterface:: |
8 |
PluginBase:: |
public | function | Determines if the plugin is configurable. | |
PluginBase:: |
protected | function | Makes an array of languages, optionally including special languages. | |
PluginBase:: |
public | function |
Return the human readable name of the display. Overrides ViewsPluginInterface:: |
|
PluginBase:: |
public static | function |
Moves form elements into fieldsets for presentation purposes. Overrides ViewsPluginInterface:: |
|
PluginBase:: |
public static | function |
Flattens the structure of form elements. Overrides ViewsPluginInterface:: |
|
PluginBase:: |
public static | function | Returns substitutions for Views queries for languages. | |
PluginBase:: |
protected | function | Fills up the options of the plugin with defaults. | |
PluginBase:: |
public | function |
Provide a full list of possible theme templates used by this style. Overrides ViewsPluginInterface:: |
1 |
PluginBase:: |
public static | function |
Lists the trusted callbacks provided by the implementing class. Overrides TrustedCallbackInterface:: |
6 |
PluginBase:: |
public | function |
Unpack options over our existing defaults, drilling down into arrays
so that defaults don't get totally blown away. Overrides ViewsPluginInterface:: |
|
PluginBase:: |
public | function |
Returns the usesOptions property. Overrides ViewsPluginInterface:: |
8 |
PluginBase:: |
public | function |
Validate that the plugin is correct and can be saved. Overrides ViewsPluginInterface:: |
6 |
PluginBase:: |
protected | function | Replaces Views' tokens in a given string. The resulting string will be sanitized with Xss::filterAdmin. | 1 |
PluginBase:: |
constant | Query string to indicate the site default language. | ||
ShowMore:: |
public | function |
Options form overwrite. Overrides SqlBase:: |
|
ShowMore:: |
protected | function |
Options definition overwrite. Overrides SqlBase:: |
|
ShowMore:: |
public | function |
Execute the count query. Overrides PagerPluginBase:: |
|
ShowMore:: |
private | function | Get the page initial items count. | |
ShowMore:: |
public | function |
Render overwrite. Overrides SqlBase:: |
|
ShowMore:: |
public | function |
Query overwrite. Overrides SqlBase:: |
|
ShowMore:: |
public | function |
Render overwrite. Overrides PagerPluginBase:: |
|
ShowMore:: |
public | function |
Summary title overwrite. Overrides PagerPluginBase:: |
|
ShowMore:: |
public | function |
Options form validate. Overrides SqlBase:: |
|
SqlBase:: |
protected | property | The pager manager. | |
SqlBase:: |
protected | property | The pager parameters. | |
SqlBase:: |
public static | function |
Creates an instance of the plugin. Overrides PluginBase:: |
|
SqlBase:: |
public | function |
Overrides PagerPluginBase:: |
|
SqlBase:: |
public | function |
Overrides PagerPluginBase:: |
|
SqlBase:: |
public | function |
The cache contexts associated with this object. Overrides CacheableDependencyInterface:: |
|
SqlBase:: |
public | function |
The maximum age for which this object may be cached. Overrides CacheableDependencyInterface:: |
|
SqlBase:: |
public | function |
The cache tags associated with this object. Overrides CacheableDependencyInterface:: |
|
SqlBase:: |
protected | function |
Overrides PagerPluginBase:: |
|
SqlBase:: |
protected | function |
Overrides PagerPluginBase:: |
|
SqlBase:: |
public | function |
Set the current page. Overrides PagerPluginBase:: |
|
SqlBase:: |
public | function |
Update global paging info. Overrides PagerPluginBase:: |
|
SqlBase:: |
public | function |
Overrides PagerPluginBase:: |
|
SqlBase:: |
public | function |
Constructs a SqlBase object. Overrides PluginBase:: |
|
StringTranslationTrait:: |
protected | property | The string translation service. | 1 |
StringTranslationTrait:: |
protected | function | Formats a string containing a count of items. | |
StringTranslationTrait:: |
protected | function | Returns the number of plurals supported by a given language. | |
StringTranslationTrait:: |
protected | function | Gets the string translation service. | |
StringTranslationTrait:: |
public | function | Sets the string translation service to use. | 2 |
StringTranslationTrait:: |
protected | function | Translates a string to the current language or to a given language. | |
TrustedCallbackInterface:: |
constant | Untrusted callbacks throw exceptions. | ||
TrustedCallbackInterface:: |
constant | Untrusted callbacks trigger silenced E_USER_DEPRECATION errors. | ||
TrustedCallbackInterface:: |
constant | Untrusted callbacks trigger E_USER_WARNING errors. |