Craft CMS で変数を定義する場合、 {% set %} タグでセットします。
このとき、{% for %} など一部のタグ内で新しく定義したものはローカルスコープになるため、外からアクセスしたい場合はテンプレート冒頭で初期化しておくといった工夫をしていました。
グローバル変数を利用することで、細かいことを気にする必要がなくなるとしたら便利ですよね?
そこで、今回は Craft 4.5 から新たに加わったグローバル変数 _globals の使い方をご紹介したいと思います。
これは Craft CMS Advent Calendar 2023 14日目の記事です。
_globals とは
グローバル変数 _globals は空の Laravel Collection オブジェクトで、Collections のメソッドをすべて使えるようになっています。
Craft CMS では、それに加えて独自のマクロset と one が用意されています。
値のセットと取得
_globals を使うときは、キーと値の組み合わせが必要となる状況だと思いますので set マクロを利用します。
{% do _globals.set('foo', 'bar') %}このとき、{% do %} タグを利用する点に注意しましょう。
次に、値を取得する場合は get メソッドを利用します。
{{ _globals.get('foo') }}この例では、そのまま出力してしまって問題ないため {{ }} で囲っているだけですが、 セットされた内容によっては raw フィルタが必要となります。
ネストした値のセットと取得
コレクションをネストすることも可能です。
{% do _globals.set('meta', collect(null)) %}meta キーの値をコレクションとして初期化します。確認したバージョン(Craft 4.5.12)では collect() だとエラーになるため、collect(null) としておきます。
{% do _globals.get('meta').set('title', 'ページタイトル') %}
{% do _globals.get('meta').set('description', 'ページの概要文') %}次に、_globals.get('meta').set() の形で meta キーのコレクションに値をセットします。
{{ _globals.get('meta').get('title') }}値を取得する場合は _globals.get('meta').get('title') の形でキーを指定します。
_globals にセットされた内容を確認するには
_globals に限った話ではありませんが、Craft CMS で変数の内容を確認する場合 {% dump %} タグを利用してデバッグツールバーに出力すると効率的です。
{% dump _globals %}デバッグツールバーを表示するには、管理者アカウントでログイン後、管理画面のマイ・アカウント編集画面に移動します。

次に、「設定」タブの下段にある フロントエンドにデバッグツールバーを表示 を ON にします。

あとはブラウザでフロントエンドにアクセスし、デバッグツールバーの Dumps タブで内容を確認しましょう。
まとめ
今回は、新しく追加されたグローバル変数 _globals の使い方について、まとめてみました。
従来だと、テンプレートごとにセットした変数を条件に応じて上書きすることが多かったと思います。
ルール化してしまえばそれほど面倒ではないものの、誤って同名の変数を上書きしてしまったり、テンプレートが少し冗長になってしまったりといった懸念もありました。
今後は _globals を利用して、よりシンプルなテンプレートにしていきたいですね。