diff --git a/file_entity/file_entity.file_api.inc b/file_entity/file_entity.file_api.inc index 799fe90..0574002 100644 --- a/file_entity/file_entity.file_api.inc +++ b/file_entity/file_entity.file_api.inc @@ -272,28 +272,33 @@ function file_view_file($file, $displays = 'default', $langcode = NULL) { * @see file_view_file() */ function file_displays($file_type, $view_mode = 'default') { - // If the requested view mode isn't configured to use a custom display for its - // fields, then don't use a custom display for its file either. - $view_mode_settings = field_view_mode_settings('file', $file_type); - if (empty($view_mode_settings[$view_mode]['custom_settings'])) { - $view_mode = 'default'; - } + $displays_cache = &drupal_static(__FUNCTION__, array()); - // Load the display configurations for the file type and view mode. If none - // exist for the view mode, use the default view mode. - if ($view_mode != 'default') { - $displays = file_displays_load($file_type, $view_mode, TRUE); - } - if (empty($displays)) { - $displays = file_displays_load($file_type, 'default', TRUE); - } + if (!isset($displays_cache[$file_type][$view_mode])) { + // If the requested view mode isn't configured to use a custom display for its + // fields, then don't use a custom display for its file either. + $view_mode_settings = field_view_mode_settings('file', $file_type); + if (empty($view_mode_settings[$view_mode]['custom_settings'])) { + $view_mode = 'default'; + } - // Convert the display objects to arrays and remove unnecessary keys. - foreach ($displays as $formatter_name => $display) { - $displays[$formatter_name] = array_intersect_key((array) $display, drupal_map_assoc(array('status', 'weight', 'settings'))); + // Load the display configurations for the file type and view mode. If none + // exist for the view mode, use the default view mode. + if ($view_mode != 'default') { + $displays = file_displays_load($file_type, $view_mode, TRUE); + } + if (empty($displays)) { + $displays = file_displays_load($file_type, 'default', TRUE); + } + + // Convert the display objects to arrays and remove unnecessary keys. + foreach ($displays as $formatter_name => $display) { + $displays[$formatter_name] = array_intersect_key((array) $display, drupal_map_assoc(array('status', 'weight', 'settings'))); + } + $displays_cache[$file_type][$view_mode] = $displays; } - return $displays; + return $displays_cache[$file_type][$view_mode]; } /**