web-dev-qa-db-ja.com

リンクされているレンダリング画像

管理されていない画像ファイルを読み込んでいて、ブロックでレンダリングしたいのですが、リンクする必要があります。 uri(public:// ...)があり、次の方法で画像をレンダリングできます。

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

これは機能しますが、いくつかのURLにリンクされているようにするにはどうすればよいですか?

3
tobias554

image_formatterはエンティティフィールドをレンダリングするためのものであり、それがないと使用できません。

次のように、リンクにレンダー配列を使用してみてください:

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

画像のスタイリングを追加せずに(元の質問ではそれについて一度も触れたことがないため)、これは機能することがわかりました。

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

おそらく、画像を自分でレンダリングしてから、その周りにリンクを追加する必要があります。だから次のようなもの:

$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