これは Craft CMS Advent Calendar 2022 6日目の記事です。
先日のエントリでリッチエディタ(Redactor)で共通の値を使い回す話を書いた。
テキストエリアのフィールドで使う場合はどうするか、という話。
ひとまずはこのような感じでリファレンスタグを使えばグローバルの値を参照することができる。
Reference Tags | Craft CMS Documentation | 4.x
https://craftcms.com/docs/4.x/...
まぁ、この {globalset:262:testText1}
をどうやって取り出すのかというのはあるが。
定義としては {<Type>:<Identifier>:<Property>}
ということらしいので、、、
Identifier についてはグローバルの設定画面で
URLが /admin/settings/globals/262?site=default
こんな感じなので 262
ということがわかる。
設定値をこのグローバルに集約しておけば、あとは Property
の所をフィールドのハンドルにすることで使うことができる。
テンプレート側で出力するときは
<h2>test textarea 1</h2> {{ entry.testTextarea1 }}
で出力すると、リファレンスタグがそのままでてしまうので、
テンプレート側に
<h2>test textarea 1</h2> {{ entry.testTextarea1|parseRefs|raw }}
こんな感じで parseRefs フィルタと raw フィルタを追加することで処理される。
Filters | Craft CMS Documentation | 4.x
https://craftcms.com/docs/4.x/...
raw - Documentation - Twig - The flexible, fast, and secure PHP template engine
https://twig.symfony.com/doc/3...
改行も反映させたいときは nl2br フィルタを付けるかんじで。
<h2>test textarea 1</h2> {{ entry.testTextarea1|parseRefs|raw|nl2br }}
リファレンスタグを取得するのが若干難しいので、リッチエディタで使った方がよさそうな印象。
GraphQL で利用する場合
テキストエリアに入っている値を GraphQLで取得する場合は parseRefs の directive を利用する。
https://craftcms.com/docs/4.x/...
こんな感じのクエリで @parseRefs
を付ける
query{ entries(section:"testStructure"){ title ... on testStructure_default_Entry{ testEditor testTextarea1 @parseRefs } } }
これでちゃんと Reference Tags が展開されて取得できる。
改めてドキュメントを見ていたら、 GraphQL API 部分のディレクティブが増えてるような気がする。
List of available directives
https://craftcms.com/docs/4.x/...
これはありがたい話だ。