Index: modules/node/content_types.inc =================================================================== RCS file: /cvs/drupal/drupal/modules/node/content_types.inc,v retrieving revision 1.79 diff -u -r1.79 content_types.inc --- modules/node/content_types.inc 1 Jul 2009 12:10:32 -0000 1.79 +++ modules/node/content_types.inc 2 Jul 2009 12:20:24 -0000 @@ -182,13 +182,18 @@ '#default_value' => variable_get('node_submitted_' . $type->type, TRUE), '#description' => t('Enable the submitted by Username on date text.'), ); - $form['display']['teaser_length'] = array( - '#type' => 'select', - '#title' => t('Length of trimmed posts'), - '#default_value' => variable_get('teaser_length_' . $type->type, 600), - '#options' => drupal_map_assoc(array(0, 200, 400, 600, 800, 1000, 1200, 1400, 1600, 1800, 2000), '_node_characters'), - '#description' => t("The maximum number of characters used in the trimmed version of a post. Drupal will use this setting to determine at which offset long posts should be trimmed. The trimmed version of a post is typically used as a teaser when displaying the post on the main page, in XML feeds, etc. To disable teasers, set to 'Unlimited'.") - ); + // We don't need a teaser length if the content type has no body + if ($type->has_body) { + $instance = field_info_instance('body', $type->type); + $summary_length = $instance['settings']['summary_length'] ? $instance['settings']['summary_length'] : 600; + $form['display']['teaser_length'] = array( + '#type' => 'select', + '#title' => t('Length of trimmed posts'), + '#default_value' => $summary_length, + '#options' => drupal_map_assoc(array(0, 200, 400, 600, 800, 1000, 1200, 1400, 1600, 1800, 2000), '_node_characters'), + '#description' => t("The maximum number of characters used in the trimmed version of a post. Drupal will use this setting to determine at which offset long posts should be trimmed. The trimmed version of a post is typically used as a teaser when displaying the post on the main page, in XML feeds, etc. To disable teasers, set to 'Unlimited'.") + ); + } $form['old_type'] = array( '#type' => 'value', '#value' => $type->type, @@ -309,6 +314,7 @@ $type->custom = $form_state['values']['custom']; $type->modified = TRUE; $type->locked = $form_state['values']['locked']; + $type->summary_length = $form_state['values']['teaser_length']; if ($op == t('Reset to defaults')) { node_type_reset($type); Index: modules/node/node.module =================================================================== RCS file: /cvs/drupal/drupal/modules/node/node.module,v retrieving revision 1.1077 diff -u -r1.1077 node.module --- modules/node/node.module 2 Jul 2009 04:27:23 -0000 1.1077 +++ modules/node/node.module 2 Jul 2009 12:20:25 -0000 @@ -465,7 +465,10 @@ 'bundle' => $type->type, 'label' => $type->body_label, 'widget_type' => 'text_textarea_with_summary', - 'settings' => array('display_summary' => TRUE), + 'settings' => array( + 'display_summary' => TRUE, + 'summary_length' => 600, + ), // With no UI in core, we have to define default // formatters for the teaser and full view. @@ -487,6 +490,7 @@ else { $instance['label'] = $type->body_label; $instance['settings']['display_summary'] = TRUE; + $instance['settings']['summary_length'] = $type->summary_length; field_update_instance($instance); } } Index: modules/field/modules/text/text.module =================================================================== RCS file: /cvs/drupal/drupal/modules/field/modules/text/text.module,v retrieving revision 1.14 diff -u -r1.14 text.module --- modules/field/modules/text/text.module 1 Jul 2009 12:10:32 -0000 1.14 +++ modules/field/modules/text/text.module 2 Jul 2009 12:20:23 -0000 @@ -68,7 +68,7 @@ 'label' => t('Long text and summary'), 'description' => t('This field stores long text in the database along with optional summary text.'), 'settings' => array('max_length' => ''), - 'instance_settings' => array('text_processing' => 1, 'display_summary' => 0), + 'instance_settings' => array('text_processing' => 1, 'display_summary' => 0, 'summary_length' => 600), 'default_widget' => 'text_textarea_with_summary', 'default_formatter' => 'text_summary_or_trimmed', ), @@ -214,9 +214,9 @@ } } else { - $item[$delta]['safe'] = check_plain($item['value']); + $items[$delta]['safe'] = check_plain($item['value']); if ($field['type'] == 'text_with_summary') { - $item[$delta]['safe_summary'] = check_plain($item['summary']); + $items[$delta]['safe_summary'] = check_plain($item['summary']); } } } @@ -300,7 +300,10 @@ function theme_field_formatter_text_trimmed($element) { $field = field_info_field($element['#field_name']); $instance = field_info_instance($element['#field_name'], $element['#bundle']); - return text_summary($element['#item']['safe'], $instance['settings']['text_processing'] ? $element['#item']['format'] : NULL); + // @todo + // Make the size depend on the build type. + $size = $instance['settings']['summary_length']; + return text_summary($element['#item']['safe'], $instance['settings']['text_processing'] ? $element['#item']['format'] : NULL, $size); } /** @@ -317,7 +320,9 @@ return $element['#item']['safe_summary']; } else { - $size = variable_get('teaser_length_' . $element['#bundle'], 600); + // @todo + // Make the size depend on the build type. + $size = $instance['settings']['summary_length']; return text_summary($element['#item']['safe'], $instance['settings']['text_processing'] ? $element['#item']['format'] : NULL, $size); } }