管理されていない画像ファイルを読み込んでいて、ブロックでレンダリングしたいのですが、リンクする必要があります。 uri(public:// ...)があり、次の方法で画像をレンダリングできます。
$ build ['my_image'] = ['#theme' => 'image_style'、 '#style_name' => 'large'、 '#uri' => $ uri、];
これは機能しますが、いくつかのURLにリンクされているようにするにはどうすればよいですか?
image_formatterはエンティティフィールドをレンダリングするためのものであり、それがないと使用できません。
次のように、リンクにレンダー配列を使用してみてください:
$type_link_nested_array = [
'#type' => 'link',
'#title' => ['#theme' => 'image_style', '#style_name' => 'large', '#uri' => $uri, ],
'#url' => Url::fromUri('https://www.drupal.org'),
];
画像のスタイリングを追加せずに(元の質問ではそれについて一度も触れたことがないため)、これは機能することがわかりました。
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();
おそらく、画像を自分でレンダリングしてから、その周りにリンクを追加する必要があります。だから次のようなもの:
$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>';