diff --git a/core/modules/node/node.tokens.inc b/core/modules/node/node.tokens.inc index 491ec81..9349ff7 100644 --- a/core/modules/node/node.tokens.inc +++ b/core/modules/node/node.tokens.inc @@ -136,10 +136,29 @@ function node_tokens($type, $tokens, array $data = array(), array $options = arr case 'body': case 'summary': if ($items = field_get_items('node', $node, 'body', $language_code)) { - $column = ($name == 'body') ? 'value' : 'summary'; $instance = field_info_instance('node', 'body', $node->type); $field_langcode = field_language('node', $node, 'body', $language_code); - $replacements[$original] = $sanitize ? _text_sanitize($instance, $field_langcode, $items[0], $column) : $items[0][$column]; + if ($name == 'body') { + $replacements[$original] = $sanitize ? _text_sanitize($instance, $field_langcode, $items[0], 'value') : $items[0]['value']; + break; + } + if (!empty($items[0]['summary'])) { + $output = $sanitize ? _text_sanitize($instance, $field_langcode, $items[0], 'summary') : $items[0]['summary']; + } + else { + // Try getting trim length from teaser display, otherwise use + // default value. + if (array_key_exists('teaser', $instance['display']) && $instance['display']['teaser']['type'] == 'text_summary_or_trimmed') { + $trim_length = $instance['display']['teaser']['settings']['trim_length']; + } + else { + $trim_length = NULL; + } + $output = $sanitize ? _text_sanitize($instance, $field_langcode, $items[0], 'value') : $items[0]['value']; + $output = text_summary($output, $instance['settings']['text_processing'] ? $items[0]['format'] : NULL, $trim_length); + } + + $replacements[$original] = $output; } break;