template_preprocess_file_link

template_preprocess_file_link(&$variables)

Prepares variables for file link templates.

Default template: file-link.html.twig.

Parameters

array $variables: An associative array containing:

  • file: A file object to which the link will be created.
  • icon_directory: (optional) A path to a directory of icons to be used for files. Defaults to the value of the "icon.directory" variable.
  • description: A description to be displayed instead of the filename.
  • attributes: An associative array of attributes to be placed in the a tag.

File

core/modules/file/file.module, line 1245
Defines a "managed_file" Form API field and a "file" field for Field module.

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
function template_preprocess_file_link(&$variables) {
  $file = $variables['file'];
  $options = array();
 
  $file_entity = ($file instanceof File) ? $file : File::load($file->fid);
  // @todo Wrap in file_url_transform_relative(). This is currently
  // impossible. As a work-around, we currently add the 'url.site' cache context
  // to ensure different file URLs are generated for different sites in a
  // multisite setup, including HTTP and HTTPS versions of the same site.
  $url = file_create_url($file_entity->getFileUri());
  $variables['#cache']['contexts'][] = 'url.site';
 
  $mime_type = $file->getMimeType();
  // Set options as per anchor format described at
  $options['attributes']['type'] = $mime_type . '; length=' . $file->getSize();
 
  // Use the description as the link text if available.
  if (empty($variables['description'])) {
    $link_text = $file_entity->getFilename();
  }
  else {
    $link_text = $variables['description'];
    $options['attributes']['title'] = $file_entity->getFilename();
  }
 
  // Classes to add to the file field for icons.
  $classes = array(
    'file',
    // Add a specific class for each and every mime type.
    'file--mime-' . strtr($mime_type, array('/' => '-', '.' => '-')),
    // Add a more general class for groups of well known MIME types.
    'file--' . file_icon_class($mime_type),
  );
 
  // Set file classes to the options array.
  $variables['attributes'] = new Attribute($variables['attributes']);
  $variables['attributes']->addClass($classes);
 
  $variables['link'] = \Drupal::l($link_text, Url::fromUri($url, $options));
}
doc_Drupal
2025-01-10 15:47:30
Comments
Leave a Comment

Please login to continue.