diff --git a/core/modules/field/lib/Drupal/field/Plugin/Type/Formatter/FormatterInterface.php b/core/modules/field/lib/Drupal/field/Plugin/Type/Formatter/FormatterInterface.php index 8d4763d..e48828d 100644 --- a/core/modules/field/lib/Drupal/field/Plugin/Type/Formatter/FormatterInterface.php +++ b/core/modules/field/lib/Drupal/field/Plugin/Type/Formatter/FormatterInterface.php @@ -35,9 +35,8 @@ public function settingsForm(array $form, array &$form_state); /** * Returns a short summary for the current formatter settings. * - * If an empty result is returned, the formatter is assumed to have no - * configurable settings, and no UI will be provided to display a settings - * form. + * If an empty result is returned, a UI can still be provided to display + * a settings form in case the formatter has configurable settings. * * @return array() * A short summary of the formatter settings. diff --git a/core/modules/field/lib/Drupal/field/Plugin/Type/Widget/WidgetInterface.php b/core/modules/field/lib/Drupal/field/Plugin/Type/Widget/WidgetInterface.php index 9f64445..ddab487 100644 --- a/core/modules/field/lib/Drupal/field/Plugin/Type/Widget/WidgetInterface.php +++ b/core/modules/field/lib/Drupal/field/Plugin/Type/Widget/WidgetInterface.php @@ -40,9 +40,8 @@ public function settingsForm(array $form, array &$form_state); /** * Returns a short summary for the current widget settings. * - * If an empty result is returned, the widget is assumed to have no - * configurable settings, and no UI will be provided to display a settings - * form. + * If an empty result is returned, a UI can still be provided to display + * a settings form in case the widget has configurable settings. * * @return array * A short summary of the widget settings. diff --git a/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/field/formatter/TestFieldEmptySettingFormatter.php b/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/field/formatter/TestFieldEmptySettingFormatter.php new file mode 100644 index 0000000..6682361 --- /dev/null +++ b/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/field/formatter/TestFieldEmptySettingFormatter.php @@ -0,0 +1,66 @@ + t('Setting'), + '#type' => 'textfield', + '#size' => 20, + '#default_value' => $this->getSetting('field_empty_setting'), + '#required' => TRUE, + ); + return $element; + } + + /** + * {@inheritdoc} + */ + public function settingsSummary() { + $summary = array(); + $setting = $this->getSetting('field_empty_setting'); + if (!empty($setting)) { + $summary[] = t('Default empty setting now has a value.'); + } + return $summary; + } + + /** + * {@inheritdoc} + */ + public function viewElements(FieldItemListInterface $items) { + $elements = array(); + + if (!empty($items)) { + foreach ($items as $delta => $item) { + $elements[$delta] = array('#markup' => $this->getSetting('field_empty_setting')); + } + } + + return $elements; + } +} diff --git a/core/modules/field_ui/lib/Drupal/field_ui/DisplayOverviewBase.php b/core/modules/field_ui/lib/Drupal/field_ui/DisplayOverviewBase.php index edd687a..f82f400 100644 --- a/core/modules/field_ui/lib/Drupal/field_ui/DisplayOverviewBase.php +++ b/core/modules/field_ui/lib/Drupal/field_ui/DisplayOverviewBase.php @@ -355,6 +355,8 @@ protected function buildFieldRow($field_id, FieldInstanceInterface $instance, En '#markup' => '
' . implode('
', $summary) . '
', '#cell_attributes' => array('class' => array('field-plugin-summary-cell')), ); + } + if ($plugin->getSettings()) { $field_row['settings_edit'] = $base_button + array( '#type' => 'image_button', '#name' => $field_id . '_settings_edit', diff --git a/core/modules/field_ui/lib/Drupal/field_ui/Tests/ManageDisplayTest.php b/core/modules/field_ui/lib/Drupal/field_ui/Tests/ManageDisplayTest.php index daf263e..dc888ff 100644 --- a/core/modules/field_ui/lib/Drupal/field_ui/Tests/ManageDisplayTest.php +++ b/core/modules/field_ui/lib/Drupal/field_ui/Tests/ManageDisplayTest.php @@ -93,6 +93,17 @@ function testFormatterUI() { // Confirm that the settings are updated on the settings form. $this->drupalPostAjaxForm(NULL, array(), "field_test_settings_edit"); $this->assertFieldByName($fieldname, 'foo'); + + // Test the empty setting formatter. + $edit = array('fields[field_test][type]' => 'field_empty_setting'); + $this->drupalPostForm(NULL, $edit, t('Save')); + $this->assertNoText('Default empty setting now has a value.'); + $this->assertFieldById('edit-fields-field-test-settings-edit'); + $this->drupalPostAjaxForm(NULL, array(), "field_test_settings_edit"); + $fieldname = 'fields[field_test][settings_edit_form][settings][field_empty_setting]'; + $edit = array($fieldname => 'non empty setting'); + $this->drupalPostAjaxForm(NULL, $edit, "field_test_plugin_settings_update"); + $this->assertText('Default empty setting now has a value.'); } /**