diff --git a/modules/field/field.crud.inc b/modules/field/field.crud.inc index a6aaab1..313be90 100644 --- a/modules/field/field.crud.inc +++ b/modules/field/field.crud.inc @@ -591,6 +591,7 @@ function _field_write_instance($instance, $update = FALSE) { $display += array( 'label' => 'above', 'type' => isset($field_type['default_formatter']) ? $field_type['default_formatter'] : 'hidden', + 'limit' => FALSE, 'settings' => array(), ); if ($display['type'] != 'hidden') { diff --git a/modules/field/field.default.inc b/modules/field/field.default.inc index cb49bdb..c262361 100644 --- a/modules/field/field.default.inc +++ b/modules/field/field.default.inc @@ -221,6 +221,7 @@ function field_default_view($entity_type, $entity, $field, $instance, $langcode, '#field_name' => $field['field_name'], '#field_type' => $field['type'], '#field_translatable' => $field['translatable'], + '#field_limit' => $display['limit'], '#entity_type' => $entity_type, '#bundle' => $bundle, '#object' => $entity, diff --git a/modules/field/field.module b/modules/field/field.module index af9e8c8..0746eb9 100644 --- a/modules/field/field.module +++ b/modules/field/field.module @@ -1031,6 +1031,12 @@ function template_preprocess_field(&$variables, $hook) { $variables['label_hidden'] = ($element['#label_display'] == 'hidden'); $variables['label'] = $variables['label_hidden'] ? NULL : check_plain($element['#title']); + // Check whether we need to reduce the number of items to display. + $field_limit = $element['#field_limit']; + if ($field_limit && count($element['#items']) > $field_limit) { + $element['#items'] = array_slice($element['#items'], 0, $field_limit); + } + // We want other preprocess functions and the theme implementation to have // fast access to the field item render arrays. The item render array keys // (deltas) should always be a subset of the keys in #items, and looping on diff --git a/modules/field_ui/field_ui.admin.inc b/modules/field_ui/field_ui.admin.inc index b594fac..6dc2067 100644 --- a/modules/field_ui/field_ui.admin.inc +++ b/modules/field_ui/field_ui.admin.inc @@ -956,6 +956,24 @@ function field_ui_display_overview_form($form, &$form_state, $entity_type, $bund 'settings_edit_form' => array(), ); + if (isset($field['cardinality']) && $field['cardinality'] != 1) { + $table[$name]['format']['type']['#prefix'] = '
'; + $table[$name]['format']['type']['#suffix'] = '
'; + $table[$name]['format']['limit'] = array( + '#size' => 2, + '#type' => 'textfield', + '#title' => t('Limit number of items to display for @title', array('@title' => $instance['label'])), + '#title_display' => 'invisible', + '#default_value' => $display['limit'], + '#prefix' => '
', + '#suffix' => '
', + '#attributes' => array( + 'alt' => t('Enter a number to limit the number of items to display. Leave empty to display them all.'), + 'title' => t('Enter a number to limit the number of items to display. Leave empty to display them all.'), + ), + ); + } + // Formatter settings. // Check the currently selected formatter, and merge persisted values for @@ -1296,6 +1314,7 @@ function field_ui_display_overview_form_submit($form, &$form_state) { 'type' => $values['type'], 'weight' => $values['weight'], 'settings' => $settings, + 'limit' => isset($values['format']['limit']) && is_numeric($values['format']['limit']) ? $values['format']['limit'] : FALSE, ); field_update_instance($instance); } diff --git a/modules/field_ui/field_ui.css b/modules/field_ui/field_ui.css index c25d2a4..2e6dd9c 100644 --- a/modules/field_ui/field_ui.css +++ b/modules/field_ui/field_ui.css @@ -39,6 +39,10 @@ table.field-ui-overview tr.region-add-new-title { float: left; margin-right: .5em; } +#field-display-overview .display-limit { + float: left; + margin-right: .5em; +} #field-display-overview .field-formatter-settings-edit-wrapper { float: right; }