Для загрузки и вывода SVG изображений есть модуль Svg Image. Однако он не умеет сохранять в базе ширину/высоту загруженной картинки, как это делает стандартный модуль Image.
Фиксим:
// MODULENAME.module
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Entity\FieldableEntityInterface;
use Drupal\file\FileInterface;
/**
* Implements hook_entity_presave().
*/
function MODULENAME_entity_presave(EntityInterface $entity): void {
if ($entity instanceof FieldableEntityInterface) {
foreach ($entity->getFieldDefinitions() as $field_name => $field_definition) {
if ($field_definition->getType() == 'image') {
foreach ($entity->get($field_name) as $image_field_item) {
/** @var FileInterface $image_file_entity */
$image_file_entity = $image_field_item->entity;
if (
$image_file_entity &&
svg_image_is_file_svg($image_file_entity) &&
!$image_field_item->width &&
$image_file_dimensions = svg_image_get_image_file_dimensions($image_file_entity)
) {
$image_field_item
->set('width', $image_file_dimensions['width'])
->set('height', $image_file_dimensions['height']);
}
}
}
}
}
}
Ну и выводим соответствующие атрибуты у svg картинок:
/**
* Preprocess function for image-formatter.html.twig.
*/
function MODULENAME_preprocess_image_formatter(array &$vars): void {
// Add width/height attribute to svg images
if (isset($vars['image']['#attributes'])) {
foreach (['width', 'height'] as $attribute_name) {
if (
array_key_exists($attribute_name, $vars['image']['#attributes']) &&
$vars['image']['#attributes'][$attribute_name] === NULL
) {
unset($vars['image']['#attributes'][$attribute_name]);
}
}
}
}
Написанное актуально для
Drupal 8+
Похожие записи
- Создание сравнительной таблицы с значениями из EAV Field
- Отличия "Select a single image style" от "Select multiple image styles and use the sizes attribute" в Responsive image
- Адаптивные изображения с помощью модуля Responsive image
- Сравнение производительности различных способов вывода псевдо полей
- Создание back/reverse reference computed field
Добавить комментарий