diff --git a/modules/language/language.post_update.php b/modules/language/language.post_update.php index 47defe12db7..9f7e5bb1d05 100644 --- a/modules/language/language.post_update.php +++ b/modules/language/language.post_update.php @@ -5,6 +5,9 @@ * Post update functions for Language module. */ +use Drupal\Core\Config\Entity\ConfigEntityUpdater; +use Drupal\Core\Entity\Display\EntityViewDisplayInterface; + /** * Implements hook_removed_post_updates(). */ @@ -13,3 +16,32 @@ function language_removed_post_updates() { 'language_post_update_language_select_widget' => '9.0.0', ]; } + +/** + * Set language form display component as plain text and with label above. + */ +function language_post_update_language_component_plain_text(&$sandbox = []) { + $config_entity_updater = \Drupal::classResolver(ConfigEntityUpdater::class); + + $callback = function (EntityViewDisplayInterface $view_display) { + // Only update node view modes. + if ($view_display->getTargetEntityTypeId() !== 'node') { + return FALSE; + } + // Update language component if present. + if ($view_display->getComponent('langcode')) { + // Set label above as it was. + $langcode['label'] = 'above'; + // Set to show it as plain text. + $langcode['settings'] = [ + 'link_to_entity' => FALSE, + 'native_language' => FALSE, + ]; + $view_display->setComponent('langcode', $langcode); + return TRUE; + } + return FALSE; + }; + + $config_entity_updater->update($sandbox, 'entity_view_display', $callback); +} diff --git a/modules/node/src/NodeViewBuilder.php b/modules/node/src/NodeViewBuilder.php index c10a75b71cd..7c32789a2b4 100644 --- a/modules/node/src/NodeViewBuilder.php +++ b/modules/node/src/NodeViewBuilder.php @@ -41,16 +41,6 @@ class NodeViewBuilder extends EntityViewBuilder implements TrustedCallbackInterf ]; } - // Add Language field text element to node render array. - if ($display->getComponent('langcode')) { - $build[$id]['langcode'] = [ - '#type' => 'item', - '#title' => t('Language'), - '#markup' => $entity->language()->getName(), - '#prefix' => '
', - '#suffix' => '
', - ]; - } } } diff --git a/modules/node/tests/src/Functional/NodeTypeInitialLanguageTest.php b/modules/node/tests/src/Functional/NodeTypeInitialLanguageTest.php index fba16f1e066..04b44e7c010 100644 --- a/modules/node/tests/src/Functional/NodeTypeInitialLanguageTest.php +++ b/modules/node/tests/src/Functional/NodeTypeInitialLanguageTest.php @@ -122,7 +122,7 @@ class NodeTypeInitialLanguageTest extends NodeTestBase { // Loads node page and check if Language field is hidden by default. $this->drupalGet('node/' . $node->id()); - $this->assertSession()->elementNotExists('xpath', '//div[@id="field-language-display"]/div'); + $this->assertSession()->pageTextNotContains('English'); // Configures Language field formatter and check if it is saved. $edit = [ @@ -134,9 +134,19 @@ class NodeTypeInitialLanguageTest extends NodeTestBase { $this->drupalGet('admin/structure/types/manage/article/display'); $this->assertTrue($this->assertSession()->optionExists('edit-fields-langcode-type', 'language')->isSelected()); - // Loads node page and check if Language field is shown. + // Loads the node page and checks if the Language field is shown. $this->drupalGet('node/' . $node->id()); - $this->assertSession()->elementExists('xpath', '//div[@id="field-language-display"]/div'); + $this->assertSession()->pageTextContains('English'); + + // Configure the Language field formatter to be displayed as a link. + $this->drupalGet('admin/structure/types/manage/article/display'); + $this->submitForm([], 'langcode_settings_edit'); + $edit = ['fields[langcode][settings_edit_form][settings][link_to_entity]' => TRUE]; + $this->submitForm($edit, 'langcode_plugin_settings_update'); + $this->submitForm([], 'Save'); + // Loads the node page and checks if the Language field is shown as a link. + $this->drupalGet('node/' . $node->id()); + $this->assertSession()->linkExists('English'); } }