Craft 5 から、Matrix フィールドを入れ子にすることができるようになりました。
従来であれば Super Table プラグインなどで実現していた機能ですが、Craft 5 では標準機能として利用できます。
役割を終えた Super Table フィールドは、Craft 5 アップグレードの際に Matrix フィールドへ自動変換され、任意のタイミングでフィールドタイプ自体を切り替えられるようになっています。
So long Super Table! | Verbb
https://verbb.io/blog/so-long-super-table
そこで、今回は「Matrix in Matrix(Matrix のネスト)」について見ていきましょう。
これは Craft CMS Advent Calendar 2024 16日目の記事です。
「エントリタイプ」の変更点について
はじめに、Craft 5 での「エントリタイプ」の変更点を確認しておきましょう。
これまでセクションに紐づく設定項目だった「エントリタイプ」は、Craft 5 からグローバルリソースとして 設定 > エントリタイプ
で管理できるようになりました。
エントリタイプは「セクション」と「一部のフィールド(執筆時点では、CKEditor と Matrix)」に紐づけることができます。
Craft 4 まではフィールドレイアウトの構成が全く同じ場合でも、セクションごとにエントリタイプを作成する必要がありました。Craft 5 からはエントリタイプの再利用が可能となり、使用者
列で「どのセクション・フィールドから利用されているか(または、未使用か)」も判断できるようになっています。
「Matrix フィールド」の変更点について
次に、Matrix フィールドの変更点を確認しておきましょう。
Craft 4 までは、内包するブロックを Matrix フィールド編集画面で設定していました。
Project Config の仕組みを利用して効率化できるものの、似たようなブロックを持つ Matrix フィールドが複数必要な場合、それぞれの設定を調整するには手間がかかりました。
Craft 5 からは、Matrix フィールドの設定上はグローバルリソースの「エントリタイプ」を選択する形になっています。
そのため、Matrix フィールドを配置したエントリタイプを用意し、それを Matrix フィールドの エントリタイプ
欄に紐けるだけで Matrix in Matrix が実現できるようになりました。
このサンプルでは次の設定を行い、ニュース
エントリの内容を Matrix in Matrix で構成しています。
見出し
・テキスト
など、Matrix ブロックにあたるエントリタイプを作成- Matrix フィールド
コンテンツ
の「エントリタイプ」欄に、ネストさせたいブロックをセット - エントリタイプ
ラッパー
の「フィールドレイアウト」に、Matrix フィールドコンテンツ
を配置 - Matrix フィールド
Matrix in Matrix
の「エントリタイプ」欄に、エントリタイプラッパー
をセット - エントリタイプ
ニュース
の「フィールドレイアウト」に、Matrix フィールドMatrix in Matrix
を配置
Craft 4 から大きく変わっている部分のため、慣れるのに少し時間がかかるかもしれませんが、Matrix in Matrix が標準機能として利用できるようになったことは、とても大きな進化だと感じます。
Craft 4 からのアップグレードは問題ない?
今年、稼働中の複数プロジェクトで Craft 5 にアップグレードする機会がありましたが、Super Table フィールドが Matrix フィールドに自動変換されることを含め、特に問題は発生していません。
ただし、アップグレード前にバックアップを取得の上、現行バージョンの最新版アップデートを適用しておくとよいでしょう。
Super Table プラグインのアンインストールのタイミングは?
Craft 5 にアップグレードする際、Super Table の登録データは Matrix フィールドに自動変換されます。ただし、フィールド自体は Super Table フィールドとして残るため、アンインストール前にフィールドをコンバートしておく必要があります。
そこで、任意のタイミングで次のコンソールコマンドを実行しておくとよいでしょう。
./craft super-table/migrate
設定 > フィールド
の一覧で タイプ
列に Super Table フィールドが存在しないことを確認できたら、プラグインをアンインストールしても問題ありません。
まとめ
Craft 5 で可能になった Matrix in Matrix は、エントリタイプの仕様が大きく変わったことにより、より柔軟なフィールドレイアウトを実現できるようになった結果といえます。
似たような設定を複数の場所で調整する必要がなくなったことで、より使いやすい管理画面になったのも嬉しいですね。