Skip to content
Snippets Groups Projects

Issue #3257729 follow-up: Fatal error when linking SVGs to file

@@ -2,6 +2,7 @@
namespace Drupal\svg_image_responsive\Plugin\Field\FieldFormatter;
use Drupal\Core\Cache\Cache;
use Drupal\Core\Field\FieldItemListInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Render\Markup;
@@ -67,6 +68,7 @@ class SvgResponsiveImageFormatter extends ResponsiveImageFormatter {
/** @var \Drupal\file\Entity\File[] $files */
$files = $this->getEntitiesToView($items, $langcode);
$imageLinkSetting = $this->getSetting('image_link');
$responsiveImageStyle = $this->responsiveImageStyleStorage->load($this->getSetting('responsive_image_style'));
$imageStylesToLoad = [];
if ($responsiveImageStyle) {
@@ -83,6 +85,13 @@ class SvgResponsiveImageFormatter extends ResponsiveImageFormatter {
continue;
}
if ($imageLinkSetting) {
$url = $elements[$delta]['#url'];
if ($imageLinkSetting === 'file') {
$url = $this->fileUrlGenerator->generate($file->getFileUri());
}
}
if ($this->getSetting('svg_render_as_image')) {
$attributes = $svgAttributes;
// Do not provide SVG dimensions when the width or height are already
@@ -100,6 +109,13 @@ class SvgResponsiveImageFormatter extends ResponsiveImageFormatter {
$elements[$delta]['#theme'] = 'image_formatter';
$elements[$delta]['#image_style'] = NULL;
$elements[$delta]['#item_attributes'] += $attributes;
$elements[$delta]['#cache']['tags'] = Cache::mergeTags(
$elements[$delta]['#cache']['tags'],
$file->getCacheTags()
);
if ($imageLinkSetting) {
$elements[$delta]['#url'] = $url;
}
}
else {
// Render as SVG tag.
@@ -108,10 +124,10 @@ class SvgResponsiveImageFormatter extends ResponsiveImageFormatter {
$svgRaw = str_replace('<?xml version="1.0" encoding="UTF-8"?>', '', $svgRaw);
$svgRaw = trim($svgRaw);
if ($elements[$delta]['#url']) {
if ($imageLinkSetting) {
$elements[$delta] = [
'#type' => 'link',
'#url' => $elements[$delta]['#url'],
'#url' => $url,
'#title' => Markup::create($svgRaw),
'#cache' => [
'tags' => $elements[$delta]['#cache']['tags'],
Loading