diff --git a/core/modules/views/src/Plugin/views/row/RssFields.php b/core/modules/views/src/Plugin/views/row/RssFields.php index 734e338b3337e6a27ef2252d0e8bfe7d4db9ab6e..924cd7b6e2879c76be72d75de0abc299f7611e2a 100644 --- a/core/modules/views/src/Plugin/views/row/RssFields.php +++ b/core/modules/views/src/Plugin/views/row/RssFields.php @@ -136,7 +136,9 @@ public function render($row) { $item->description = is_array($field) ? $field : ['#markup' => $field]; $item->elements = [ - ['key' => 'pubDate', 'value' => $this->getField($row_index, $this->options['date_field'])], + // Default rendering of date fields adds a <time> tag and whitespace, we + // want to remove these because this breaks RSS feeds. + ['key' => 'pubDate', 'value' => trim(strip_tags($this->getField($row_index, $this->options['date_field'])))], [ 'key' => 'dc:creator', 'value' => $this->getField($row_index, $this->options['creator_field']), diff --git a/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_display_feed.yml b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_display_feed.yml index b244793a8353df90a955ca237434f48218c54722..063d68f05f43b76c4274995cbffb450283592fc2 100644 --- a/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_display_feed.yml +++ b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_display_feed.yml @@ -47,6 +47,20 @@ display: plugin_id: field entity_type: node entity_field: title + created: + id: created + table: node_field_data + field: created + relationship: none + group_type: group + admin_label: '' + entity_type: node + entity_field: created + plugin_id: field + type: timestamp + settings: + date_format: custom + custom_date_format: 'Y-m-d' body: id: body table: node__body @@ -315,7 +329,7 @@ display: link_field: view_node description_field: body creator_field: title - date_field: title + date_field: created guid_field_options: guid_field: view_node guid_field_is_permalink: true diff --git a/core/modules/views/tests/src/Kernel/Plugin/RssFieldsTest.php b/core/modules/views/tests/src/Kernel/Plugin/RssFieldsTest.php index f2b6ee75809fd61a2a5207497bf4d9e9a722e5b2..d72000a36818e7ed8908b2902ca72534d2dbdf96 100644 --- a/core/modules/views/tests/src/Kernel/Plugin/RssFieldsTest.php +++ b/core/modules/views/tests/src/Kernel/Plugin/RssFieldsTest.php @@ -42,20 +42,23 @@ protected function setUp($import_test_views = TRUE): void { } /** - * Tests correct processing of link fields. + * Tests correct processing of RSS fields. * * This overlaps with \Drupal\Tests\views\Functional\Plugin\DisplayFeedTest to * ensure that root-relative links also work in a scenario without * subdirectory. */ - public function testLink() { + public function testRssFields() { // Set up the current user as uid 1 so the test doesn't need to deal with // permission. $this->setUpCurrentUser(['uid' => 1]); + $date = '1975-05-18'; + $node = $this->createNode([ 'type' => 'article', 'title' => 'Article title', + 'created' => strtotime($date), 'body' => [ 0 => [ 'value' => 'A paragraph', @@ -72,6 +75,7 @@ public function testLink() { $output = $view->preview('feed_2'); $output = (string) $renderer->renderRoot($output); $this->assertStringContainsString('<link>' . $node_url . '</link>', $output); + $this->assertStringContainsString('<pubDate>' . $date . '</pubDate>', $output); } }