Issue #2987598 by eliclaggett, alexpott, Lendude, Sam152: View's pagination doesn't carry the exposed filter value

merge-requests/1119/head
Lee Rowlands 2019-04-10 16:51:19 +10:00
parent 3b6f89bae7
commit fcf5177146
No known key found for this signature in database
GPG Key ID: 2B829A3DF9204DC4
4 changed files with 204 additions and 3 deletions

View File

@ -183,7 +183,7 @@ class ViewsExposedForm extends FormBase {
// https://www.drupal.org/node/342316 is resolved. // https://www.drupal.org/node/342316 is resolved.
$checked = Checkboxes::getCheckedCheckboxes($value); $checked = Checkboxes::getCheckedCheckboxes($value);
foreach ($checked as $option_id) { foreach ($checked as $option_id) {
$view->exposed_raw_input[$key][] = $value[$option_id]; $view->exposed_raw_input[$key][$option_id] = $value[$option_id];
} }
} }
else { else {

View File

@ -0,0 +1,173 @@
langcode: en
status: true
dependencies:
config:
- core.entity_view_mode.node.teaser
module:
- node
id: test_exposed_form_pager
label: ''
module: views
description: ''
tag: ''
base_table: node_field_data
base_field: nid
core: '8'
display:
default:
display_options:
access:
type: none
cache:
type: tag
exposed_form:
options:
reset_button: true
type: basic
filters:
type:
id: type
table: node_field_data
field: type
relationship: none
group_type: group
admin_label: ''
operator: in
value: { }
group: 1
exposed: true
expose:
operator_id: type_op
label: 'Content: Type'
description: 'Exposed description'
use_operator: false
operator: ''
identifier: type
required: false
remember: false
multiple: true
remember_roles:
authenticated: authenticated
anonymous: '0'
administrator: '0'
reduce: false
is_grouped: false
group_info:
label: ''
description: ''
identifier: ''
optional: true
widget: select
multiple: false
remember: false
default_group: All
default_group_multiple: { }
group_items: { }
plugin_id: in_operator
entity_type: node
entity_field: type
created:
id: created
table: node_field_data
field: created
relationship: none
group_type: group
admin_label: ''
operator: between
value:
min: ''
max: ''
value: ''
type: offset
group: 1
exposed: true
expose:
operator_id: created_op
label: 'Authored on'
description: ''
use_operator: false
operator: created_op
identifier: created
required: false
remember: false
multiple: false
remember_roles:
authenticated: authenticated
anonymous: '0'
administrator: '0'
placeholder: ''
min_placeholder: ''
max_placeholder: ''
is_grouped: false
group_info:
label: ''
description: ''
identifier: ''
optional: true
widget: select
multiple: false
remember: false
default_group: All
default_group_multiple: { }
group_items: { }
entity_type: node
entity_field: created
plugin_id: date
pager:
type: full
options:
items_per_page: 2
offset: 0
id: 0
total_pages: null
tags:
previous: ' Previous'
next: 'Next '
first: '« First'
last: 'Last »'
expose:
items_per_page: false
items_per_page_label: 'Items per page'
items_per_page_options: '5, 10, 25, 50'
items_per_page_options_all: false
items_per_page_options_all_label: '- All -'
offset: false
offset_label: Offset
quantity: 9
query:
options:
query_comment: ''
type: views_query
style:
type: default
row:
type: 'entity:node'
display_extenders: { }
display_plugin: default
display_title: Master
id: default
position: 0
cache_metadata:
max-age: -1
contexts:
- 'languages:language_interface'
- url
- url.query_args
- 'user.node_grants:view'
tags: { }
page_1:
display_options:
path: test_exposed_form_pager
display_extenders: { }
display_plugin: page
display_title: Page
id: page_1
position: 0
cache_metadata:
max-age: -1
contexts:
- 'languages:language_interface'
- url
- url.query_args
- 'user.node_grants:view'
tags: { }

View File

@ -24,7 +24,7 @@ class ExposedFormTest extends ViewTestBase {
* *
* @var array * @var array
*/ */
public static $testViews = ['test_exposed_form_buttons', 'test_exposed_block', 'test_exposed_form_sort_items_per_page']; public static $testViews = ['test_exposed_form_buttons', 'test_exposed_block', 'test_exposed_form_sort_items_per_page', 'test_exposed_form_pager'];
/** /**
* Modules to enable. * Modules to enable.
@ -381,4 +381,32 @@ class ExposedFormTest extends ViewTestBase {
$this->assertRaw('<div class="views-row">', 'Views result shown.'); $this->assertRaw('<div class="views-row">', 'Views result shown.');
} }
/**
* Tests the exposed form with a pager.
*/
public function testExposedFilterPagination() {
$this->drupalCreateContentType(['type' => 'post']);
// Create some random nodes.
for ($i = 0; $i < 5; $i++) {
$this->drupalCreateNode(['type' => 'post']);
}
$this->drupalGet('test_exposed_form_pager');
$this->getSession()->getPage()->fillField('type[]', 'post');
$this->getSession()->getPage()->fillField('created[min]', '-1 month');
$this->getSession()->getPage()->fillField('created[max]', '+1 month');
// Ensure the filters can be applied.
$this->getSession()->getPage()->pressButton('Apply');
$this->assertFieldByName('type[]', 'post');
$this->assertFieldByName('created[min]', '-1 month');
$this->assertFieldByName('created[max]', '+1 month');
// Ensure the filters are still applied after pressing next.
$this->clickLink('Next ');
$this->assertFieldByName('type[]', 'post');
$this->assertFieldByName('created[min]', '-1 month');
$this->assertFieldByName('created[max]', '+1 month');
}
} }

View File

@ -136,7 +136,7 @@ class ExposedFormRenderTest extends ViewsKernelTestBase {
$expected = [ $expected = [
'type' => 'All', 'type' => 'All',
'type_with_default_value' => 'article', 'type_with_default_value' => 'article',
'multiple_types_with_default_value' => ['article'], 'multiple_types_with_default_value' => ['article' => 'article'],
]; ];
$this->assertSame($view->exposed_raw_input, $expected); $this->assertSame($view->exposed_raw_input, $expected);
} }