このエントリは Craft CMS Advent Calendar 2019 19日目のエントリです。
昨日は「Craft CMS のダッシュボードカスタマイズに Do It Yourself widget プラグインをつかってみる」でした。
Craft CMS はデータを入れる箱としてセクション・エントリがあり、そのセクションごとに自由にフィールドを定義できるので、かなり柔軟にデータを持たせることができる。
また、そのデータを1つのサイトだけでなく、同じドメインでのサブディレクトリごとのサイト、別のドメイン、サブドメインでのサイト、でも利用することができる。
サイト | Craft 3 ドキュメント
https://docs.craftcms.com/v3/j...
データを複数のサイトで利用しようとする時はテンプレートでセクションを指定して取り出すといったこともできる。
ユーザー、所属(ユーザーグループ)が複数ある場合は基本的には、セクションを分けて管理するのが Craft CMS 的には権限などもやりやすくはなる。
ただ、セクションを分けると slug の重複などはありえるのでそこはどのような設計にするか検討が必要になる。
そうなってきたときにはサイトはわけずにセクションは同一だが自分のエントリしか登録・編集できないという感じにしておくと良いだろう。
同じセクションでもサイトが別だとslugは同一のものを設定できる。
別のサイトでURLのルールが同じことは滅多にないと思うが、運用上重複する可能性もあるので、設計時に注意したい。
サイト、セクション、エントリ、フィールド
セクションを束ねるのがサイト。
エントリを保管するのがセクション。
エントリに定義するのがフィールド。
セクション・サイトを担当するのがユーザー(ユーザーグループ)
これらを組み合わせていくことで柔軟なコンテンツ管理が可能になる。
1サイトだったり、1言語だけであればそこまで複雑なことにはならないが、多人数で使ったり、少数であっても複数のサイトを1つの CMS で管理する場合など、どうしても複雑になって理解しづらいところがあるので、 Craft CMS のマルチサイトを改めて見直してみる。
マルチサイトの延長線上に多言語サイトがあると考えるとわかりやすい。
多言語サイトについてはマルチサイト以降に改めて。
事業部単位のマルチサイト
例えば事業内容ごとにサイトが違うような物をイメージしてみる。
サイトは基本的にそれぞれ作成する。
サイトの作成はいたってシンプル。
このようなかんじで AAA と BBB を作成した。
当然この時点ではマルチサイトにセクションの設定なども行なっていないので、エントリは存在していない。
Craft CMS はプルダウンでサイトを切り替えていく。
他のサイトでは当然これまでのエントリが存在している。
セクションをサイトに紐づける
セクションごとにどのサイトに紐づけるか?という設定をしていく。
「作成したサイトにのみエントリを保存する」は名前の通り、同じセクションを管理していたとしてもエントリを作成して保存されるのはそのサイトのみ。
「このセクションで有効になっているすべてのサイトにエントリを保存する」はどこかのサイトでエントリを作成すれば、他のサイトにも保存されている。
「同じサイトグループ内の他のサイトにエントリを保存する」は今回の場合、1つのサイトグループに入れているので、「このセクションで有効になっているすべてのサイトにエントリを保存する」と同義になる。
「他のサイトにエントリを同じ言語で保存する」は言語の話がでてくるので、今は一旦割愛する。
「マルチサイト:製品」のセクションは「このセクションで有効になっているすべてのサイトにエントリを保存する」と設定して、複数の事業部で共通にデータを利用すると考える。
「マルチサイト:ニュース」のセクションは「作成したサイトにのみエントリを保存する」と設定して、複数の事業部でそれぞれニュースも管理するような形を想定する。
この状態でエントリを作成してみる。
「このセクションで有効になっているすべてのサイトにエントリを保存する」設定になっている「マルチサイト:製品」にサイト「AAA」でエントリを作成する。
サイト「BBB」にもエントリができている。
「作成したサイトにのみエントリを保存する」設定になっている「マルチサイト:ニュース」にサイト「AAA」でエントリを作成する。
サイト「BBB」を確認してもエントリはできていない。
ということで、マルチサイトの場合、エントリの扱いについてはセクションの設定によって変わってくる。
慣れるまでは設定箇所が別れているのでわかりにくいところもあるが、マルチサイトの基本ということでサイト・セクション・エントリ、の関係を見てみた。
引き続き、セクション(入力タイプ)にフィールドを定義してマルチサイトをみていく。