diff options
Diffstat (limited to 'modules/field')
-rw-r--r-- | modules/field/modules/text/text.module | 46 |
1 files changed, 43 insertions, 3 deletions
diff --git a/modules/field/modules/text/text.module b/modules/field/modules/text/text.module index d08b311ce..5862ae920 100644 --- a/modules/field/modules/text/text.module +++ b/modules/field/modules/text/text.module @@ -251,6 +251,7 @@ function text_field_formatter_info() { 'text_trimmed' => array( 'label' => t('Trimmed'), 'field types' => array('text', 'text_long', 'text_with_summary'), + 'settings' => array('trim_length' => 600), ), // The 'summary or trimmed' field formatter for text_with_summary @@ -260,11 +261,51 @@ function text_field_formatter_info() { 'text_summary_or_trimmed' => array( 'label' => t('Summary or trimmed'), 'field types' => array('text_with_summary'), + 'settings' => array('trim_length' => 600), ), ); } /** + * Implements hook_field_formatter_settings_form(). + */ +function text_field_formatter_settings_form($field, $instance, $view_mode, $form, &$form_state) { + $display = $instance['display'][$view_mode]; + $settings = $display['settings']; + + $form = array(); + + if (strpos($display['type'], '_trimmed') !== FALSE) { + $form['trim_length'] = array( + '#title' => t('Trim length'), + '#type' => 'textfield', + '#size' => 10, + '#default_value' => $settings['trim_length'], + '#element_validate' => array('_element_validate_integer_positive'), + '#required' => TRUE, + ); + } + + return $form; +} + +/** + * Implements hook_field_formatter_settings_summary(). + */ +function text_field_formatter_settings_summary($field, $instance, $view_mode) { + $display = $instance['display'][$view_mode]; + $settings = $display['settings']; + + $summary = ''; + + if (strpos($display['type'], '_trimmed') !== FALSE) { + $summary = t('Trim length') . ': ' . $settings['trim_length']; + } + + return $summary; +} + +/** * Implements hook_field_formatter_view(). */ function text_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) { @@ -276,7 +317,7 @@ function text_field_formatter_view($entity_type, $entity, $field, $instance, $la foreach ($items as $delta => $item) { $output = _text_sanitize($instance, $langcode, $item, 'value'); if ($display['type'] == 'text_trimmed') { - $output = text_summary($output, $instance['settings']['text_processing'] ? $item['format'] : NULL); + $output = text_summary($output, $instance['settings']['text_processing'] ? $item['format'] : NULL, $display['settings']['trim_length']); } $element[$delta] = array('#markup' => $output); } @@ -289,8 +330,7 @@ function text_field_formatter_view($entity_type, $entity, $field, $instance, $la } else { $output = _text_sanitize($instance, $langcode, $item, 'value'); - $size = variable_get('teaser_length_' . $instance['bundle'], 600); - $output = text_summary($output, $instance['settings']['text_processing'] ? $item['format'] : NULL, $size); + $output = text_summary($output, $instance['settings']['text_processing'] ? $item['format'] : NULL, $display['settings']['trim_length']); } $element[$delta] = array('#markup' => $output); } |