diff --git a/core/config/schema/core.entity.schema.yml b/core/config/schema/core.entity.schema.yml index bf0e12d..f57194d 100644 --- a/core/config/schema/core.entity.schema.yml +++ b/core/config/schema/core.entity.schema.yml @@ -130,9 +130,19 @@ core.entity_form_display.*.*.*: type: boolean label: 'Component' +base_field_formatter_settings: + type: mapping + mapping: + offset: + type: integer + label: 'Offset' + limit: + type: integer + label: 'Limit' + # Default schema for entity display field with undefined type. field.formatter.settings.*: - type: mapping + type: base_field_formatter_settings # Default schema for entity form display field with undefined type. field.widget.settings.*: @@ -243,7 +253,7 @@ field.widget.settings.entity_reference_autocomplete: label: 'Placeholder' field.formatter.settings.boolean: - type: mapping + type: base_field_formatter_settings mapping: format: type: string @@ -256,7 +266,7 @@ field.formatter.settings.boolean: label: 'Custom output for TRUE' field.formatter.settings.string: - type: mapping + type: base_field_formatter_settings mapping: link_to_entity: type: boolean @@ -270,7 +280,7 @@ field.formatter.settings.language: label: 'Display in native language' field.formatter.settings.number_decimal: - type: mapping + type: base_field_formatter_settings label: 'Number decimal display format settings' mapping: thousand_separator: @@ -287,7 +297,7 @@ field.formatter.settings.number_decimal: label: 'Display prefix and suffix.' field.formatter.settings.number_integer: - type: mapping + type: base_field_formatter_settings label: 'Number integer display format settings' mapping: thousand_separator: @@ -298,15 +308,15 @@ field.formatter.settings.number_integer: label: 'Display prefix and suffix.' field.formatter.settings.number_unformatted: - type: mapping + type: base_field_formatter_settings label: 'Number unformatted display format settings' field.formatter.settings.uri_link: - type: mapping + type: base_field_formatter_settings label: 'URI as link display format settings' field.formatter.settings.timestamp: - type: mapping + type: base_field_formatter_settings label: 'Timestamp display format settings' mapping: date_format: @@ -320,7 +330,7 @@ field.formatter.settings.timestamp: label: 'Time zone' field.formatter.settings.timestamp_ago: - type: mapping + type: base_field_formatter_settings label: 'Timestamp ago display format settings' mapping: future_format: @@ -334,7 +344,7 @@ field.formatter.settings.timestamp_ago: label: 'Granularity' field.formatter.settings.entity_reference_entity_view: - type: mapping + type: base_field_formatter_settings label: 'Entity reference rendered entity display format settings' mapping: view_mode: @@ -345,11 +355,11 @@ field.formatter.settings.entity_reference_entity_view: label: 'Show links' field.formatter.settings.entity_reference_entity_id: - type: mapping + type: base_field_formatter_settings label: 'Entity reference entity ID display format settings' field.formatter.settings.entity_reference_label: - type: mapping + type: base_field_formatter_settings label: 'Entity reference label display format settings' mapping: link: diff --git a/core/lib/Drupal/Core/Field/FormatterBase.php b/core/lib/Drupal/Core/Field/FormatterBase.php index db7587a..58cdd73 100644 --- a/core/lib/Drupal/Core/Field/FormatterBase.php +++ b/core/lib/Drupal/Core/Field/FormatterBase.php @@ -109,23 +109,88 @@ public function view(FieldItemListInterface $items, $langcode = NULL) { } /** + * Returns the cardinality setting of the field instance. + */ + protected function getCardinality() { + if ($this->fieldDefinition instanceof \Drupal\Core\Field\FieldDefinitionInterface) { + return $this->fieldDefinition->getFieldStorageDefinition()->getCardinality(); + } + return 0; + } + + /** + * {@inheritdoc} + */ + public static function defaultSettings() { + return array( + 'offset' => 0, + 'limit' => 0, + ) + parent::defaultSettings(); + } + + /** * {@inheritdoc} */ public function settingsForm(array $form, FormStateInterface $form_state) { - return array(); + if ($this->getCardinality() == 0) { + return array(); + } + + $element['offset'] = array( + '#type' => 'number', + '#title' => $this->t('Skip items'), + '#default_value' => $this->getSetting('offset'), + '#required' => TRUE, + '#min' => 0, + '#description' => $this->t('Number of items to skip from the beginning.') + ); + + $element['limit'] = array( + '#type' => 'number', + '#title' => $this->t('Display items'), + '#default_value' => $this->getSetting('limit'), + '#required' => TRUE, + '#min' => 0, + '#description' => $this->t('Number of items to display. Set to 0 to display all items.') + ); + + return $element; } /** * {@inheritdoc} */ public function settingsSummary() { - return array(); + $summary = array(); + $limit = $this->getSetting('limit'); + $offset = $this->getSetting('offset'); + + if ($this->getCardinality() == 0 || (empty($limit) && empty($offset))) { + return $summary; + } + + $summary[] = $this->t('Display %limit items, skip %offset items.', array( + '%limit' => $limit, + '%offset' => $offset + )); + + return $summary; } /** * {@inheritdoc} */ - public function prepareView(array $entities_items) { } + public function prepareView(array $entities_items) { + foreach ($entities_items AS $items) { + if ($this->getCardinality() != 0) { + $offset = $this->getSetting('offset'); + $limit = $this->getSetting('limit'); + if (!empty($offset) || !empty($limit)) { + $items->setValue(array_slice($items->getValue(), $offset, empty($limit) ? NULL : $limit)); + } + } + } + } /** * Returns the array of field settings. diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/BooleanFormatter.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/BooleanFormatter.php index 60c632a..6b71f7a 100644 --- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/BooleanFormatter.php +++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/BooleanFormatter.php @@ -113,7 +113,7 @@ public function settingsForm(array $form, FormStateInterface $form_state) { * {@inheritdoc} */ public function settingsSummary() { - $summary = []; + $summary = parent::settingsSummary(); $setting = $this->getSetting('format'); if ($setting == 'custom') { diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/EntityReferenceEntityFormatter.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/EntityReferenceEntityFormatter.php index 6f3ce02..7655eed 100644 --- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/EntityReferenceEntityFormatter.php +++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/EntityReferenceEntityFormatter.php @@ -143,7 +143,7 @@ public function settingsForm(array $form, FormStateInterface $form_state) { * {@inheritdoc} */ public function settingsSummary() { - $summary = array(); + $summary = parent::settingsSummary(); $view_modes = $this->entityDisplayRepository->getViewModeOptions($this->getFieldSetting('target_type')); $view_mode = $this->getSetting('view_mode'); diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/EntityReferenceFormatterBase.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/EntityReferenceFormatterBase.php index f413227..c3a2ef7 100644 --- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/EntityReferenceFormatterBase.php +++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/EntityReferenceFormatterBase.php @@ -116,6 +116,8 @@ public function view(FieldItemListInterface $items, $langcode = NULL) { * viewed. */ public function prepareView(array $entities_items) { + parent::prepareView($entities_items); + // Collect entity IDs to load. For performance, we want to use a single // "multiple entity load" to load all the entities for the multiple // "entity reference item lists" being displayed. We thus cannot use diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/EntityReferenceLabelFormatter.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/EntityReferenceLabelFormatter.php index 2084339..49d791a 100644 --- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/EntityReferenceLabelFormatter.php +++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/EntityReferenceLabelFormatter.php @@ -46,7 +46,7 @@ public function settingsForm(array $form, FormStateInterface $form_state) { * {@inheritdoc} */ public function settingsSummary() { - $summary = array(); + $summary = parent::settingsSummary(); $summary[] = $this->getSetting('link') ? t('Link to the referenced entity') : t('No link'); return $summary; } diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/NumericFormatterBase.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/NumericFormatterBase.php index 0e35629..8966a96 100644 --- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/NumericFormatterBase.php +++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/NumericFormatterBase.php @@ -48,7 +48,7 @@ public function settingsForm(array $form, FormStateInterface $form_state) { * {@inheritdoc} */ public function settingsSummary() { - $summary = array(); + $summary = parent::settingsSummary(); $summary[] = $this->numberFormat(1234.1234567890); if ($this->getSetting('prefix_suffix')) { diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/StringFormatter.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/StringFormatter.php index a1f618b..6923633 100644 --- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/StringFormatter.php +++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/StringFormatter.php @@ -101,7 +101,7 @@ public function settingsForm(array $form, FormStateInterface $form_state) { * {@inheritdoc} */ public function settingsSummary() { - $summary = []; + $summary = parent::settingsSummary(); if ($this->getSetting('link_to_entity')) { $entity_type = $this->entityManager->getDefinition($this->fieldDefinition->getTargetEntityTypeId()); $summary[] = $this->t('Linked to the @entity_label', ['@entity_label' => $entity_type->getLabel()]); diff --git a/core/modules/aggregator/config/schema/aggregator.schema.yml b/core/modules/aggregator/config/schema/aggregator.schema.yml index eb6c006..d81ea19 100644 --- a/core/modules/aggregator/config/schema/aggregator.schema.yml +++ b/core/modules/aggregator/config/schema/aggregator.schema.yml @@ -49,7 +49,7 @@ block.settings.aggregator_feed_block: label: 'Feed' field.formatter.settings.aggregator_title: - type: mapping + type: base_field_formatter_settings label: 'Formatter settings' mapping: display_as_link: diff --git a/core/modules/comment/config/schema/comment.schema.yml b/core/modules/comment/config/schema/comment.schema.yml index d9f5a77..10e4951 100644 --- a/core/modules/comment/config/schema/comment.schema.yml +++ b/core/modules/comment/config/schema/comment.schema.yml @@ -1,7 +1,7 @@ # Schema for the configuration files of the Comment module. field.formatter.settings.comment_default: - type: mapping + type: base_field_formatter_settings label: 'Comment display format settings' mapping: pager_id: diff --git a/core/modules/comment/src/Plugin/Field/FieldFormatter/CommentDefaultFormatter.php b/core/modules/comment/src/Plugin/Field/FieldFormatter/CommentDefaultFormatter.php index 80b1af4..3969d05 100644 --- a/core/modules/comment/src/Plugin/Field/FieldFormatter/CommentDefaultFormatter.php +++ b/core/modules/comment/src/Plugin/Field/FieldFormatter/CommentDefaultFormatter.php @@ -231,13 +231,16 @@ public function settingsForm(array $form, FormStateInterface $form_state) { * {@inheritdoc} */ public function settingsSummary() { + $summary = parent::settingsSummary(); + // Only show a summary if we're using a non-standard pager id. if ($this->getSetting('pager_id')) { - return array($this->t('Pager ID: @id', array( + $summary[] = $this->t('Pager ID: @id', array( '@id' => $this->getSetting('pager_id'), - ))); + )); } - return array(); + + return $summary; } } diff --git a/core/modules/datetime/config/schema/datetime.schema.yml b/core/modules/datetime/config/schema/datetime.schema.yml index 406a2fd..1e350eb 100644 --- a/core/modules/datetime/config/schema/datetime.schema.yml +++ b/core/modules/datetime/config/schema/datetime.schema.yml @@ -24,7 +24,7 @@ field.value.datetime: label: 'Default date value' field.formatter.settings.datetime_base: - type: mapping + type: base_field_formatter_settings mapping: timezone_override: type: string @@ -53,7 +53,7 @@ field.formatter.settings.datetime_custom: translation context: 'PHP date format' field.formatter.settings.datetime_time_ago: - type: mapping + type: base_field_formatter_settings label: 'Datetime time ago display format settings' mapping: future_format: diff --git a/core/modules/field/tests/modules/field_test/config/schema/field_test.schema.yml b/core/modules/field/tests/modules/field_test/config/schema/field_test.schema.yml index 3712b47..6db75ce 100644 --- a/core/modules/field/tests/modules/field_test/config/schema/field_test.schema.yml +++ b/core/modules/field/tests/modules/field_test/config/schema/field_test.schema.yml @@ -1,5 +1,5 @@ field.formatter.settings.field_test_default: - type: mapping + type: base_field_formatter_settings label: 'Field test default display format settings' mapping: test_formatter_setting: @@ -7,7 +7,7 @@ field.formatter.settings.field_test_default: label: 'Test setting' field.formatter.settings.field_test_multiple: - type: mapping + type: base_field_formatter_settings label: 'Multiple field test display format settings' mapping: test_formatter_setting_multiple: @@ -18,7 +18,7 @@ field.formatter.settings.field_test_multiple: label: 'Test altering' field.formatter.settings.field_empty_setting: - type: mapping + type: base_field_formatter_settings label: 'Empty setting field display format settings' mapping: field_empty_setting: @@ -26,7 +26,7 @@ field.formatter.settings.field_empty_setting: label: 'Test setting' field.formatter.settings.field_test_with_prepare_view: - type: mapping + type: base_field_formatter_settings label: 'Field prepare step display format settings' mapping: test_formatter_setting_additional: diff --git a/core/modules/file/config/schema/file.schema.yml b/core/modules/file/config/schema/file.schema.yml index b9f8918..0346432 100644 --- a/core/modules/file/config/schema/file.schema.yml +++ b/core/modules/file/config/schema/file.schema.yml @@ -68,19 +68,19 @@ field.field_settings.file: label: 'Enable Description field' field.formatter.settings.file_default: - type: mapping + type: base_field_formatter_settings label: 'Generic file format settings' field.formatter.settings.file_rss_enclosure: - type: mapping + type: base_field_formatter_settings label: 'RSS enclosure format settings' field.formatter.settings.file_table: - type: mapping + type: base_field_formatter_settings label: 'Table of files format settings' field.formatter.settings.file_url_plain: - type: mapping + type: base_field_formatter_settings label: 'URL to file format settings' field.widget.settings.file_generic: diff --git a/core/modules/image/config/schema/image.schema.yml b/core/modules/image/config/schema/image.schema.yml index 323220b..f5ff51b 100644 --- a/core/modules/image/config/schema/image.schema.yml +++ b/core/modules/image/config/schema/image.schema.yml @@ -129,7 +129,7 @@ field.value.image: label: 'Default value' field.formatter.settings.image: - type: mapping + type: base_field_formatter_settings label: 'Image field display format settings' mapping: image_link: diff --git a/core/modules/image/src/Plugin/Field/FieldFormatter/ImageFormatter.php b/core/modules/image/src/Plugin/Field/FieldFormatter/ImageFormatter.php index 4c3a27d..5c0d593 100644 --- a/core/modules/image/src/Plugin/Field/FieldFormatter/ImageFormatter.php +++ b/core/modules/image/src/Plugin/Field/FieldFormatter/ImageFormatter.php @@ -125,14 +125,14 @@ public function settingsForm(array $form, FormStateInterface $form_state) { '#options' => $link_types, ); - return $element; + return parent::settingsForm($form, $form_state) + $element; } /** * {@inheritdoc} */ public function settingsSummary() { - $summary = array(); + $summary = parent::settingsSummary(); $image_styles = image_style_options(FALSE); // Unset possible 'No defined styles' option. diff --git a/core/modules/link/config/schema/link.schema.yml b/core/modules/link/config/schema/link.schema.yml index fd2edb1..8c92f02 100644 --- a/core/modules/link/config/schema/link.schema.yml +++ b/core/modules/link/config/schema/link.schema.yml @@ -1,7 +1,7 @@ # Schema for the configuration files of the Link module. field.formatter.settings.link: - type: mapping + type: base_field_formatter_settings label: 'Link format settings' mapping: trim_length: diff --git a/core/modules/link/src/Plugin/Field/FieldFormatter/LinkFormatter.php b/core/modules/link/src/Plugin/Field/FieldFormatter/LinkFormatter.php index 7d2d0ee..6c83417 100644 --- a/core/modules/link/src/Plugin/Field/FieldFormatter/LinkFormatter.php +++ b/core/modules/link/src/Plugin/Field/FieldFormatter/LinkFormatter.php @@ -138,7 +138,7 @@ public function settingsForm(array $form, FormStateInterface $form_state) { * {@inheritdoc} */ public function settingsSummary() { - $summary = array(); + $summary = parent::settingsSummary(); $settings = $this->getSettings(); diff --git a/core/modules/options/config/schema/options.schema.yml b/core/modules/options/config/schema/options.schema.yml index 017b396..8ebbf94 100644 --- a/core/modules/options/config/schema/options.schema.yml +++ b/core/modules/options/config/schema/options.schema.yml @@ -100,11 +100,11 @@ field.value.list_string: label: 'Value' field.formatter.settings.list_default: - type: mapping + type: base_field_formatter_settings label: 'Options list default display settings' field.formatter.settings.list_key: - type: mapping + type: base_field_formatter_settings label: 'Key format settings' field.widget.settings.options_buttons: diff --git a/core/modules/responsive_image/config/schema/responsive_image.schema.yml b/core/modules/responsive_image/config/schema/responsive_image.schema.yml index f05a8e2..1b26a09 100644 --- a/core/modules/responsive_image/config/schema/responsive_image.schema.yml +++ b/core/modules/responsive_image/config/schema/responsive_image.schema.yml @@ -58,7 +58,7 @@ responsive_image.image_mapping_type.sizes: label: 'Image style' field.formatter.settings.responsive_image: - type: mapping + type: base_field_formatter_settings label: 'Responsive image list format settings' mapping: responsive_image_style: diff --git a/core/modules/responsive_image/src/Plugin/Field/FieldFormatter/ResponsiveImageFormatter.php b/core/modules/responsive_image/src/Plugin/Field/FieldFormatter/ResponsiveImageFormatter.php index ff91e68..4d068d0 100644 --- a/core/modules/responsive_image/src/Plugin/Field/FieldFormatter/ResponsiveImageFormatter.php +++ b/core/modules/responsive_image/src/Plugin/Field/FieldFormatter/ResponsiveImageFormatter.php @@ -163,7 +163,7 @@ public function settingsForm(array $form, FormStateInterface $form_state) { * {@inheritdoc} */ public function settingsSummary() { - $summary = array(); + $summary = parent::settingsSummary(); $responsive_image_style = $this->responsiveImageStyleStorage->load($this->getSetting('responsive_image_style')); if ($responsive_image_style) { diff --git a/core/modules/responsive_image/tests/modules/responsive_image_test_module/config/schema/responsive_image_test_module.schema.yml b/core/modules/responsive_image/tests/modules/responsive_image_test_module/config/schema/responsive_image_test_module.schema.yml index 6208012..a2001b0 100644 --- a/core/modules/responsive_image/tests/modules/responsive_image_test_module/config/schema/responsive_image_test_module.schema.yml +++ b/core/modules/responsive_image/tests/modules/responsive_image_test_module/config/schema/responsive_image_test_module.schema.yml @@ -1,6 +1,6 @@ # Schema for the configuration files of the Responsive image test theme module. field.formatter.settings.responsive_image_test: - type: mapping + type: base_field_formatter_settings label: 'Responsive image list format settings' mapping: responsive_image_style: diff --git a/core/modules/taxonomy/config/schema/taxonomy.schema.yml b/core/modules/taxonomy/config/schema/taxonomy.schema.yml index efa08e1..c1a933d 100644 --- a/core/modules/taxonomy/config/schema/taxonomy.schema.yml +++ b/core/modules/taxonomy/config/schema/taxonomy.schema.yml @@ -35,5 +35,5 @@ taxonomy.vocabulary.*: label: 'Weight' field.formatter.settings.entity_reference_rss_category: - type: mapping + type: base_field_formatter_settings label: 'Taxonomy format settings' diff --git a/core/modules/telephone/config/schema/telephone.schema.yml b/core/modules/telephone/config/schema/telephone.schema.yml index dc8713a..49eaa7d 100644 --- a/core/modules/telephone/config/schema/telephone.schema.yml +++ b/core/modules/telephone/config/schema/telephone.schema.yml @@ -1,7 +1,7 @@ # Schema for the configuration files of the Telephone module. field.formatter.settings.telephone_link: - type: mapping + type: base_field_formatter_settings label: 'Telephone link format settings' mapping: title: diff --git a/core/modules/telephone/src/Plugin/Field/FieldFormatter/TelephoneLinkFormatter.php b/core/modules/telephone/src/Plugin/Field/FieldFormatter/TelephoneLinkFormatter.php index f77b751..fd2efd9 100644 --- a/core/modules/telephone/src/Plugin/Field/FieldFormatter/TelephoneLinkFormatter.php +++ b/core/modules/telephone/src/Plugin/Field/FieldFormatter/TelephoneLinkFormatter.php @@ -46,7 +46,7 @@ public function settingsForm(array $form, FormStateInterface $form_state) { * {@inheritdoc} */ public function settingsSummary() { - $summary = array(); + $summary = parent::settingsSummary(); $settings = $this->getSettings(); if (!empty($settings['title'])) { diff --git a/core/modules/text/config/schema/text.schema.yml b/core/modules/text/config/schema/text.schema.yml index dfc92cd..c09b3b2 100644 --- a/core/modules/text/config/schema/text.schema.yml +++ b/core/modules/text/config/schema/text.schema.yml @@ -77,11 +77,11 @@ field.value.text_with_summary: label: 'Text format' field.formatter.settings.text_default: - type: mapping + type: base_field_formatter_settings label: 'Formatted text default display format settings' field.formatter.settings.text_summary_or_trimmed: - type: mapping + type: base_field_formatter_settings label: 'Summary or trimmed formatted text display format settings' mapping: trim_length: @@ -89,7 +89,7 @@ field.formatter.settings.text_summary_or_trimmed: label: 'Trim length' field.formatter.settings.text_trimmed: - type: mapping + type: base_field_formatter_settings label: 'Trimmed text display format settings' mapping: trim_length: diff --git a/core/modules/text/src/Plugin/Field/FieldFormatter/TextTrimmedFormatter.php b/core/modules/text/src/Plugin/Field/FieldFormatter/TextTrimmedFormatter.php index 1842a43..83f861a 100644 --- a/core/modules/text/src/Plugin/Field/FieldFormatter/TextTrimmedFormatter.php +++ b/core/modules/text/src/Plugin/Field/FieldFormatter/TextTrimmedFormatter.php @@ -58,7 +58,7 @@ public function settingsForm(array $form, FormStateInterface $form_state) { * {@inheritdoc} */ public function settingsSummary() { - $summary = array(); + $summary = parent::settingsSummary(); $summary[] = t('Trimmed limit: @trim_length characters', array('@trim_length' => $this->getSetting('trim_length'))); return $summary; } diff --git a/core/modules/user/config/schema/user.schema.yml b/core/modules/user/config/schema/user.schema.yml index 627d8a6..6a16d8c 100644 --- a/core/modules/user/config/schema/user.schema.yml +++ b/core/modules/user/config/schema/user.schema.yml @@ -187,7 +187,7 @@ entity_reference_selection.default:user: label: 'Include the anonymous user in the matched entities.' field.formatter.settings.user_name: - type: mapping + type: base_field_formatter_settings mapping: link_to_entity: type: boolean