diff --git a/core/lib/Drupal/Core/Render/Renderer.php b/core/lib/Drupal/Core/Render/Renderer.php index f95116e5f7..81ac898d8b 100644 --- a/core/lib/Drupal/Core/Render/Renderer.php +++ b/core/lib/Drupal/Core/Render/Renderer.php @@ -215,6 +215,10 @@ protected function doRender(&$elements, $is_root_call = FALSE) { return ''; } + if (!is_array($elements)) { + return $elements; + } + if (!isset($elements['#access']) && isset($elements['#access_callback'])) { $elements['#access'] = $this->doCallback('#access_callback', $elements['#access_callback'], [$elements]); } diff --git a/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_field_api_classes.yml b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_field_api_classes.yml new file mode 100644 index 0000000000..2564d19ddc --- /dev/null +++ b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_field_api_classes.yml @@ -0,0 +1,156 @@ +langcode: en +status: true +dependencies: + module: + - node +id: test_field_api_classes +label: test_field_api_classes +module: views +description: '' +tag: '' +base_table: node_field_data +base_field: nid +display: + default: + id: default + display_title: Default + display_plugin: default + position: 0 + display_options: + title: '' + fields: + title: + id: title + table: node_field_data + field: title + relationship: none + group_type: group + admin_label: '' + entity_type: node + entity_field: title + plugin_id: field + label: '' + exclude: false + alter: + alter_text: false + text: '' + make_link: false + path: '' + absolute: false + external: false + replace_spaces: false + path_case: none + trim_whitespace: false + alt: '' + rel: '' + link_class: '' + prefix: '' + suffix: '' + target: '' + nl2br: false + max_length: 0 + word_boundary: false + ellipsis: false + more_link: false + more_link_text: '' + more_link_path: '' + strip_tags: false + trim: false + preserve_tags: '' + html: false + element_type: '' + element_class: '' + element_label_type: '' + element_label_class: '' + element_label_colon: false + element_wrapper_type: '' + element_wrapper_class: '' + element_default_classes: true + empty: '' + hide_empty: false + empty_zero: false + hide_alter_empty: true + click_sort_column: value + type: string + settings: + link_to_entity: true + group_column: value + group_columns: { } + group_rows: true + delta_limit: 0 + delta_offset: 0 + delta_reversed: false + delta_first_last: false + multi_type: separator + separator: ', ' + field_api_classes: true + pager: + type: none + options: + offset: 0 + exposed_form: + type: basic + options: + submit_button: Apply + reset_button: false + reset_button_label: Reset + exposed_sorts_label: 'Sort by' + expose_sort_order: true + sort_asc_label: Asc + sort_desc_label: Desc + access: + type: none + options: { } + cache: + type: tag + options: { } + empty: { } + sorts: { } + arguments: { } + filters: { } + filter_groups: + operator: AND + groups: { } + style: + type: default + row: + type: fields + options: + default_field_elements: true + inline: { } + separator: '' + hide_empty: false + query: + type: views_query + options: + query_comment: '' + disable_sql_rewrite: false + distinct: false + replica: false + query_tags: { } + relationships: { } + header: { } + footer: { } + display_extenders: { } + cache_metadata: + max-age: -1 + contexts: + - 'languages:language_content' + - 'languages:language_interface' + - 'user.node_grants:view' + tags: { } + page_1: + id: page_1 + display_title: Page + display_plugin: page + position: 1 + display_options: + display_extenders: { } + path: test_field_api_classes + cache_metadata: + max-age: -1 + contexts: + - 'languages:language_content' + - 'languages:language_interface' + - 'user.node_grants:view' + tags: { } diff --git a/core/modules/views/tests/src/Functional/Plugin/FieldApiClassesTest.php b/core/modules/views/tests/src/Functional/Plugin/FieldApiClassesTest.php new file mode 100644 index 0000000000..e23220a308 --- /dev/null +++ b/core/modules/views/tests/src/Functional/Plugin/FieldApiClassesTest.php @@ -0,0 +1,70 @@ +enableViewsTestModule(); + + $node_type = NodeType::create(['type' => 'page', 'label' => 'Page']); + $node_type->save(); + $node1 = Node::create(['title' => 'Test node 1', 'type' => 'page']); + $node1->save(); + } + + /** + * Tests View with field api classes enabled. + */ + public function testFieldApiClasses(): void { + $page = $this->getSession()->getPage(); + $assert_session = $this->assertSession(); + + // Check a View with enabled field api classes displays without errors. + $this->drupalGet('test_field_api_classes'); + $assert_session->statusCodeEquals(200); + + // Check that the field template is used, by checking all classes that + // should be inherited from the field template of theme classy. + $linkTagToTest = $page->find('css', 'span.field-content a'); + $this->assertTrue($linkTagToTest->getParent()->hasClass('field')); + $this->assertTrue($linkTagToTest->getParent()->hasClass('field--name-title')); + $this->assertTrue($linkTagToTest->getParent()->hasClass('field--type-string')); + $this->assertTrue($linkTagToTest->getParent()->hasClass('field--label-above')); + } + +}