2019/5/5

Redactor で使われている最初の画像を First Image plugin で取り出す #craftcms

og:image とかに記事内で利用している画像とかを使いたい場合があると思います。

a-blog cms だとエントリで使ってる画像ユニットのうちメイン画像を一つだけ選べるというのがあってあれは便利そうだったなー。

とりあえず、今回は Redactor (リッチエディタ)内で使われている画像なので Asset での取り出しとかがやりにくいのでどうしたものかなー、と。

MTでの entryasset みたいなのがあればいいなー、と。

正規表現で取り出す?

正規表現で取り出す、、、とかはきついというかあまりやりたくないなー、と思ってた。

@tinybeans の記事とかが参考になる。

ブログ記事本文中の最初のimgのURLを取得する | かたつむりくんのWWW
https://tinybeans.net/blog/201…

First Image プラグイン

@BUN に First Image plugin というのを教えてもらった。

First Image
https://plugins.craftcms.com/f…

最初のという感じではありますが、それが嫌ならちゃんと画像のブロック追加して管理するとかになるだろうなー、と。

これ使えればそれ用の画像選択されてなければ、的な分岐はいれられそう。

タグの使い方はこんな感じの様子。

{{ entry.body | getFirstImage }}
or
{% set image = getFirstImage(entry.body) %}

とりあえず、本文部分は Matrix で組んであるのでそれで調整してみた。

記事用の _entry.twig の先頭で以下のような感じでとりあえず記事本文も取り出しておいて

{% extends ‘_layout_bootstrap’ %}

{% set contentBody %} {% for block in entry.articlebody.all() %} {# ブロックタイプごとのパーツを読み込み #} {% include ‘_matrix_component/’ ~ block.type ignore missing %} {% endfor %} {% endset %}

{% set contentTitle = entry.title %} {% set contentDescription = entry.title %} {% set contentImage %}{{ contentBody | getFirstImage }}{% endset %}

これでとりだせた。

@BUN ありがとうございますー!!