web-dev-qa-db-fra.com

Image de rendu liée

Je charge un fichier image non managé et souhaite le rendre dans un bloc, mais il doit être lié. J'ai un uri (public: // ...) et je peux rendre l'image en utilisant

$ build ['my_image'] = ['#theme' => 'image_style', '#style_name' => 'large', '#uri' => $ uri,];

Cela fonctionne, mais comment puis-je le rendre lié à une URL?

3
tobias554

image_formatter est de rendre un champ d'entité, vous ne pouvez pas l'utiliser sans l'avoir.

Essayez d'utiliser un tableau de rendu pour le lien, comme ceci:

$type_link_nested_array = [
  '#type' => 'link',
  '#title' => ['#theme' => 'image_style', '#style_name' => 'large', '#uri' => $uri, ],
  '#url' => Url::fromUri('https://www.drupal.org'),
];
6
Berdir

Sans ajouter de style d'image (comme la question d'origine n'a jamais mentionné cela), j'ai trouvé que cela fonctionnait:

use Drupal\Core\Link;
use Drupal\Core\Url;
use Drupal\Core\Render\Markup;
$img = '<img src="path_to_my_image" />';
$rendered_image = render($img);
$image_markup = Markup::create($rendered_image);
$link = Link::fromTextAndUrl($image_markup, Url::fromUri('internal:/my_link_path'))->toString();
2
liquidcms

Vous auriez probablement besoin de rendre l'image vous-même, puis d'ajouter le lien autour d'elle. Donc quelque chose comme:

$img_render_array =  [ '#theme' => 'image_style', '#style_name' => 'large', '#uri' => $uri, ];
$img = render($img_render_array)->__toString();
$build['my_image']['#markup'] = '<a href="/">'.$img.'</a>';
1
Leigh