diff --git a/token.module b/token.module index 5eb111e..439c0d3 100644 --- a/token.module +++ b/token.module @@ -141,44 +141,38 @@ function token_field_info_alter(&$info) { * Implements hook_entity_view_display_alter(). */ function token_entity_view_display_alter(EntityViewDisplayInterface $entity_display, array $context) { - if ($context['view_mode'] == 'token') { - /** @var EntityViewDisplayInterface $view_display */ - $view_display = \Drupal::entityTypeManager()->getStorage('entity_view_display') - ->load($context['entity_type'] . '.' . $context['bundle'] . '.' . $context['view_mode']); - - // If the token view mode fell back to the 'default' view mode, then - // use the default token formatter. - if (empty($view_display) || !$view_display->status()) { - /** @var \Drupal\Core\Field\FieldTypePluginManager $fieldTypeManager */ - $fieldTypeManager = \Drupal::service('plugin.manager.field.field_type'); - /** @var \Drupal\Core\Field\FormatterPluginManager $formatterManager */ - $formatterManager = \Drupal::service('plugin.manager.field.formatter'); - - $components = $entity_display->getComponents(); - foreach ($components as $field_name => $field_info) { - $fields[] = $context['entity_type'] . '.' . $field_name; - } - $field_types = \Drupal::entityTypeManager()->getStorage('field_storage_config')->loadMultiple($fields); + // If the token view mode fell back to the 'default' view mode, then + // use the default token formatter. + if ($context['view_mode'] == 'token' && $entity_display->getMode() != 'token') { + /** @var \Drupal\Core\Field\FieldTypePluginManager $fieldTypeManager */ + $fieldTypeManager = \Drupal::service('plugin.manager.field.field_type'); + /** @var \Drupal\Core\Field\FormatterPluginManager $formatterManager */ + $formatterManager = \Drupal::service('plugin.manager.field.formatter'); + + $components = $entity_display->getComponents(); + foreach ($components as $field_name => $field_info) { + $fields[] = $context['entity_type'] . '.' . $field_name; + } + $field_types = \Drupal::entityTypeManager()->getStorage('field_storage_config')->loadMultiple($fields); - foreach ($field_types as $field_id => $field_type_info) { - $field_type_definition = $fieldTypeManager->getDefinition($field_type_info->getType()); + foreach ($field_types as $field_id => $field_type_info) { + $field_type_definition = $fieldTypeManager->getDefinition($field_type_info->getType()); - // If the field has specified a specific formatter to be used by default - // with tokens, use that, otherwise use the default formatter. - $formatter = !empty($field_type_definition['default_token_formatter']) ? $field_type_definition['default_token_formatter'] : $field_type_definition['default_formatter']; + // If the field has specified a specific formatter to be used by default + // with tokens, use that, otherwise use the default formatter. + $formatter = !empty($field_type_definition['default_token_formatter']) ? $field_type_definition['default_token_formatter'] : $field_type_definition['default_formatter']; - // Now that we have a formatter, fill in all the settings. - $formatter_info = $formatterManager->getDefinition($formatter); + // Now that we have a formatter, fill in all the settings. + $formatter_info = $formatterManager->getDefinition($formatter); - $field_name = $field_type_info->getName(); - $field_info = $components[$field_name]; + $field_name = $field_type_info->getName(); + $field_info = $components[$field_name]; - $field_info['type'] = $formatter; - $field_info['settings'] = isset($formatter_info['settings']) ? $formatter_info['settings'] : array(); - $field_info['settings']['label'] = 'hidden'; + $field_info['type'] = $formatter; + $field_info['settings'] = isset($formatter_info['settings']) ? $formatter_info['settings'] : array(); + $field_info['settings']['label'] = 'hidden'; - $entity_display->setComponent($field_name, $field_info); - } + $entity_display->setComponent($field_name, $field_info); } } }