Using HOOK_preprocess_field(&$variables)
:
/**
* Implements HOOK_preprocess_field().
*
* @inheritdoc
*/
function HOOK_preprocess_field(&$variables) {
$element = $variables['element'];
// Check that field_name is set.
if (isset($element['#field_name'])) {
// Checking for field_name, but could check for field_type.
if ($element['#field_name'] == 'field_name') {
// Set our file size to a variable.
$fileSize = $element[0]['#file']->filesize->value;
// Edit our title for the field display.
$element[0]['#file']->filename->value = $element[0]['#file']->filename->value . ' ' . $fileSize;
}
}
}
Using HOOK_preprocess_file_link(&$variables)
:
/**
* Add the "file-link.html.twig" template to your theme and adjust as needed.
*
* Twig variables:
* - {{ fileLinkDisplay.fileBundle }}
* - {{ fileLinkDisplay.fileCreatedTime }}
* - {{ fileLinkDisplay.fileChangedTime }}
* - {{ fileLinkDisplay.fileFid }}
* - {{ fileLinkDisplay.fileLangcode }}
* - {{ fileLinkDisplay.fileMime }}
* - {{ fileLinkDisplay.fileName }}
* - {{ fileLinkDisplay.fileOwnerId }}
* - {{ fileLinkDisplay.fileOwnerName }}
* - {{ fileLinkDisplay.fileOwnerUserPictureUrl }}
* - {{ fileLinkDisplay.fileSize }}
* - {{ fileLinkDisplay.fileSizeFormatted }}
* - {{ fileLinkDisplay.fileStatus }}
* - {{ fileLinkDisplay.fileUrl }}
* - {{ fileLinkDisplay.fileUuid }}
*/
function HOOK_preprocess_file_link(&$variables) {
if (isset($variables['file'])) {
$variables['fileLinkDisplay'] = [
'fileBundle' => $variables['file']
->bundle(),
'fileCreatedTime' => $variables['file']
->getCreatedTime(),
'fileChangedTime' => $variables['file']
->getChangedTime(),
'fileFid' => $variables['file']
->fid->value,
'fileLangcode' => $variables['file']
->langcode->value,
'fileMime' => $variables['file']
->getMimeType(),
'fileName' => $variables['file']
->getFilename(),
'fileOwnerId' => $variables['file']
->getOwnerId(),
'fileOwnerName' => $variables['file']
->getOwner()->name->value,
'fileOwnerUserPictureUrl' => file_create_url($variables['file']
->getOwner()->user_picture->entity->uri->value),
'fileSize' => $variables['file']
->getSize(),
'fileSizeFormatted' => format_size($variables['file']
->getSize()),
'fileStatus' => $variables['file']
->status->value,
'fileUrl' => file_create_url($variables['file']
->getFileUri()),
'fileUuid' => $variables['file']
->uuid->value,
];
}
}
See https://gitlab.com/prestosaurus/file-link-display/blob/master/file_link_display.module
Then your file-link.html.twig
might look like:
{#
/**
* @file
* Theme override for a link to a file.
*
* @see template_preprocess_file_link()
*/
#}
{{ attach_library('classy/file') }}
<span{{ attributes }}>{{ icon }} {{ link }} {{ fileLinkDisplay.fileSize }} {{ fileLinkDisplay.fileMime }}</span>
[file:size]
&[file:mime]
- or you can access them in the twig if you install Twig Tweakdrupal_token([file:size])
-- drupal.org/project/twig_tweak{{ drupal_token('node.myfield.entity|file:size') }}