EntityBrowserPagerElement.php in Entity Browser 8
Same filename and directory in other branches
Namespace
Drupal\entity_browser\ElementFile
src/Element/EntityBrowserPagerElement.phpView source
<?php
namespace Drupal\entity_browser\Element;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Render\Element\FormElement;
/**
* Provides an Entity Browser pager form element.
*
* Properties:
* - #total_pages: Total number of pages. This is optional with default
* value set on NULL. With default value pager can't calculate last page
* correctly and "next" will be available even on last page. For
* correct functionality #total_pages must be set up.
*
* Example:
* @code
* $form['pager'] = [
* '#type' => 'entity_browser_pager',
* '#total_pages' => 12,
* ];
* @endcode
*
* Number of the current page is stored in the form state. In order to get it
* the provided helper function needs to be utilized:
*
* @code
* $page = EntityBrowserPagerElement::getCurrentPage($form_state);
* @endcode
*
* @see ::getCurrentPage($form_state).
*
* @FormElement("entity_browser_pager")
*/
class EntityBrowserPagerElement extends FormElement {
/**
* {@inheritdoc}
*/
public function getInfo() {
$class = get_class($this);
return [
'#process' => [
[
$class,
'processEntityBrowserPager',
],
],
'#theme_wrappers' => [
'form_element',
],
'#total_pages' => NULL,
'#attached' => [
'library' => [
'entity_browser/pager',
],
],
];
}
/**
* Process Entity browser pager element.
*/
public static function processEntityBrowserPager(&$element, FormStateInterface $form_state, &$complete_form) {
$page = static::getCurrentPage($form_state);
$element['previous'] = [
'#type' => 'submit',
'#submit' => [
[
static::class,
'submitPager',
],
],
'#value' => t('‹ Previous'),
'#name' => 'prev_page',
'#disabled' => $page === 1,
'#attributes' => [
'class' => [
'prev',
],
],
'#limit_validation_errors' => [
array_merge($element['#parents'], [
'previous',
]),
],
];
$element['current'] = [
'#type' => 'html_tag',
'#tag' => 'span',
'#value' => t('Page @page', [
'@page' => $page,
]),
'#attributes' => [
'class' => [
'current',
],
],
];
$element['next'] = [
'#type' => 'submit',
'#submit' => [
[
static::class,
'submitPager',
],
],
'#value' => t('Next ›'),
'#name' => 'next_page',
'#disabled' => $element['#total_pages'] == $page,
'#attributes' => [
'class' => [
'next',
],
],
'#limit_validation_errors' => [
array_merge($element['#parents'], [
'next',
]),
],
];
return $element;
}
/**
* Submit handler for next and previous buttons.
*
* @param array $form
* The form.
* @param \Drupal\Core\Form\FormStateInterface $form_state
* Form state.
*/
public static function submitPager(array $form, FormStateInterface $form_state) {
$page = static::getCurrentPage($form_state);
$triggering_element = $form_state
->getTriggeringElement();
if ($triggering_element['#name'] == 'prev_page') {
$page--;
}
elseif ($triggering_element['#name'] == 'next_page') {
$page++;
}
$form_state
->set('page', $page);
$form_state
->setRebuild();
}
/**
* Gets current page from the form state.
*
* @param \Drupal\Core\Form\FormStateInterface $form_state
* Form state.
*
* @return int
* Current page.
*/
public static function getCurrentPage(FormStateInterface $form_state) {
return !empty($form_state
->get('page')) ? $form_state
->get('page') : 1;
}
/**
* Sets current page.
*
* @param \Drupal\Core\Form\FormStateInterface $form_state
* Form state.
* @param int $page
* (Optional) Page to set as current. Pager will be reset to the first page
* if omitted.
*/
public static function setCurrentPage(FormStateInterface $form_state, $page = 1) {
$form_state
->set('page', $page);
}
}
Classes
Name | Description |
---|---|
EntityBrowserPagerElement | Provides an Entity Browser pager form element. |