diff --git a/token.module b/token.module index fb2c855..3cec5e2 100644 --- a/token.module +++ b/token.module @@ -195,6 +195,28 @@ function token_field_info_alter(&$info) { } /** + * Implements hook_field_display_alter(). + */ +function token_field_display_alter(&$display, $context) { + if ($context['view_mode'] == 'token') { + $view_mode_settings = field_view_mode_settings($context['instance']['entity_type'], $context['instance']['bundle']); + // If the token view mode fell back to the 'default' view mode, then + // use the default token formatter. + if (empty($view_mode_settings[$context['view_mode']]['custom_settings'])) { + $field_type_info = field_info_field_types($context['field']['type']); + if (!empty($field_type_info['default_token_formatter'])) { + $display['type'] = $field_type_info['default_token_formatter']; + + $formatter_info = field_info_formatter_types($display['type']); + $display['settings'] = isset($formatter_info['settings']) ? $formatter_info['settings'] : array(); + $display['settings']['label'] = 'hidden'; + $display['module'] = $formatter_info['module']; + } + } + } +} + +/** * Implements hook_field_create_instance(). */ function token_field_create_instance($instance) { @@ -271,6 +293,14 @@ function token_get_entity_mapping($value_type = 'token', $value = NULL) { */ function token_entity_info_alter(&$info) { foreach (array_keys($info) as $entity_type) { + // Add a token view mode if it does not already exist. + if (!empty($info[$entity_type]['view modes']) && !isset($info[$entity_type]['view modes']['token'])) { + $info[$entity_type]['view modes']['token'] = array( + 'label' => t('Tokens'), + 'custom settings' => FALSE, + ); + } + if (!empty($info[$entity_type]['token type'])) { // If the entity's token type is already defined, great! continue; diff --git a/token.tokens.inc b/token.tokens.inc index 18135ec..707c34a 100644 --- a/token.tokens.inc +++ b/token.tokens.inc @@ -1201,7 +1201,6 @@ function _token_field_info($field_name = NULL) { } $info[$key]['token types'][] = $token_type; - $info[$key]['formatter'] = isset($type_info[$field['type']]['default_token_formatter']) ? $type_info[$field['type']]['default_token_formatter'] : $type_info[$field['type']]['default_formatter']; // Find which label is most commonly used. foreach ($field['bundles'][$entity] as $bundle) { @@ -1258,11 +1257,6 @@ function field_token_info_alter(&$info) { 'name' => $field['label'], 'description' => $field['description'], 'module' => 'token', - 'field settings' => array( - 'display' => array( - 'type' => $field['formatter'], - ), - ), ); } } @@ -1301,10 +1295,8 @@ function field_tokens($type, $tokens, array $data = array(), array $options = ar continue; } - $display = isset($token_info['field settings']['display']) ? $token_info['field settings']['display'] : array(); - $display += array('label' => FALSE); - $field_output = field_view_field($entity_type, $entity, $field_name, $display, $langcode); - $field_output['#display_settings'] = $display; + $field_output = field_view_field($entity_type, $entity, $field_name, 'token', $langcode); + $field_output['#token_options'] = $options; $field_output['#pre_render'][] = 'token_pre_render_field_token'; $replacements[$original] = drupal_render($field_output); } @@ -1331,7 +1323,7 @@ function token_pre_render_field_token(&$elements) { $deltas = element_get_visible_children($elements); $count = count($deltas); if ($count > 1) { - $join = isset($elements['#display_settings']['join']) ? $elements['#display_settings']['join'] : ", "; + $join = isset($elements['#token_options']['join']) ? $elements['#token_options']['join'] : ", "; foreach ($deltas as $index => $delta) { // Do not add a suffix to the last item. if ($index < ($count - 1)) {