bp出版社
出版社のような書籍などを扱うWebサイトを想定して Craft CMS を使ってみた簡単なサンプルです。
目次
掲載コンテンツイメージ
掲載するコンテンツのイメージです。
管理画面イメージ
実装解説
セクションの分け方考察
書籍によっては著者は複数名いたり、また著者の情報を一元管理することで情報がアップデートされた場合に関係する書籍の情報にも反映することができるため、著者の情報は1つのセクションのデータとして管理しています。
書籍のカテゴリもセクションでエントリとして持たせています。 Craft CMS にも「カテゴリ」の機能がありますのでこのあたりは使いやすい方を使えます。
書籍のエントリから「著者」「カテゴリ」を選択してデータの関連付け、分類を行うことができます。

別セクションの著者を選択

別セクションのカテゴリを選択
書籍以外があるときに入力タイプにするかセクションにするか
今回、「書籍」としていますが場合によっては雑誌があったり電子書籍があったり、形態としていくつかパターンがある場合もあるでしょう。
入力欄がほぼ同じ場合であれば、入力タイプをわけて書籍、雑誌と切り替える方法もあります。
また書籍と同列で別のセクションを用意するといったことも可能です。
入力タイプについては「同じ分類のデータでもちょっとだけ入力パターンが異なるといったことにも対応可能」で少し解説しています。
入力タイプを切り替える方法の場合、ユーザ(グループ)で編集コンテンツに制限などがかけられないので、ユーザ(グループ)ごとに編集するコンテンツを分けたいといった要件があるときはセクションを分けたほうが良いでしょう。
入力タイプを分けてもセクションを分けてもURL設計には制限を受けないので自由に設定が可能です。
ただ、別のセクションとした際にはslugは重複しても許可されますので、 slug をURLに使う場合重なってしまう可能性があるのでそこを考慮する必要はあります。
URLがエントリのIDをベースなど一意に決まるなどの条件が必要になります。
リッチエディタにするかブロックエディタ(Matrix・行列フィールド)にするか
リッチエディタをつかって「書籍」の「特色」は入力できるようにしていますが、ここはある程度レイアウトのパターンが決まっていてコンテンツボリュームとして大きい場合などはMatrix(行列)フィールドをつかってHTMLを意識させないような入力欄を用意するのも良さそうです。
CMSデフォルトのテーブルフィールド
著者情報のSNS情報欄(サイト表示上は掲載していませんが)はデフォルトのテーブルフィールドを使っています。
基本の項目としては決まっているのであらかじめデフォルト値を設定しておくことも可能です。この場合は「Github、Twitter、Facebook」です。

Craft CMS のデフォルトのテーブルフィールドはフィールドとして列は決めておくことができ、行数をユーザが自由に追加することができます。
このサンプルのように項目名を決め打ちで入れておいてもユーザが編集できてしまうというところはあります。
行数は最大行数を決めておけばユーザが増やせるかどうかの簡易制御は可能です。

最大行数を指定していない時

最大行数を指定している時
テーブルフィールドの場合、セルをマージするような使い方は難しいですがそれはリッチエディタでの表組みエディタなどを使うことをおすすめします。
各列の値はいくつかの種類の入力欄が設定できます。(画像が無いのが残念です)使い方次第ではこの種類があるだけでも便利に使えるでしょう。

ルートを使ったテンプレートの汎用化
カテゴリアーカイブと著者アーカイブは共通のテンプレートを利用しています。
URLのルール(ルート)にあわせてどのセクションの内容をとってくるか?をテンプレート側で書くことで汎用的な使い方ができます。

また、特定のURLのときにのみ情報を出したい(この場合、著者アーカイブのみに出している著者プロフィール)といったこともできます。
追加拡張例
- カテゴリの親子構造を反映(表示、リンク、URL etc)
- 各書籍の在庫数をFeedmeを使ってバッチ処理でCMSにデータ連携する
- 書籍の関連書籍を設定できるようにする(手動で設定、自動で設定)
- 外部の販売サイトの情報をもたせられるようにする(テーブルフィールドかMatrix)
- お問合せフォームなどとのエントリ(セクション)の連携