background
CMS

Sitecoreのデータ構造①

2020/11/27公開
Sitecoreのデータ構造①

今回は、Sitecoreでのデータ構造とコンテンツ作成をご説明いたします。

一見複雑で管理が難しいように見えますが、サイトの特性を加味し設計するととても運用しやすいCMSです。

本コラムをご覧頂き、少しでもそれをお伝えできたら、と思います!

Sitecoreのデータの作り

Sitecoreでは、テンプレートでコンテンツのデータ構造を定義し、そのテンプレートに沿ってアイテム(コンテンツ)を作成します。通常のデータ管理で例えると、テンプレートでのデータ構造の定義がテーブルの定義になり、アイテムの作成がレコード登録に相当します。Sitecoreの管理画面を用いるとこで、テンプレートのデータ構造定義およびアイテムの登録が容易に行えます。

作成したアイテムの情報がどのようにデータとして登録されているか確認してみましょう。

サンプルで、以下のような簡単なテンプレートを作成してみます。

テンプレート Page Template
フィールドセクション ContentInfo
フィールド title
contents
updateddate

※テンプレートビルダー(Sitecore管理画面)

テンプレートビルダー(Sitecore管理画面)

定義したテンプレート情報は「Items」テーブルに格納されます。

以下に「Items」のデータを記載する。 ※尚、IDは省略した値に変更。

Items

「ID」がアイテムID、「Name」がアイテム名、「ParentID」が親アイテムIDの情報になります。行番号1がテンプレート、行番号2がフィールドセクション、行番号4~6がフィールド情報になっているのが分かります。

ツリー構造に合わせて、各情報の「ParentID」に親のアイテムIDが設定されているので、テンプレートから「ParentID」を辿ることで、テンプレートの定義情報を確認することが可能です。

尚、行番号7はアイテムの情報である。「TemplateID」にテンプレートのアイテムIDが登録されています。

※管理画面のツリー

管理画面のツリー

サンプルのテンプレートをもとにアイテムを作成してみます。
作成したアイテムのデータは「UnversionedFields」に格納されているのが分かります。

Items UnversionedFields

※コンテンツエディター(Sitecore管理画面)

※コンテンツエディター(Sitecore管理画面)

「UnversionedFields」テーブルの「ItemID」にはアイテムID、「FieldId」にはフィールドのアイテムID、「Value」にフィールド値が格納されています。
上図のように結合することで、アイテムのフィールド値が確認できます。
「UnversionedFields」テーブルには、言語別/バージョン別に値が格納されるので、「Language」「Version」を指定することで特定のデータを得ることも可能です。

「UnversionedFields」以外にも、フィールド値を格納しているテーブルがあります。

テーブル名 詳細
UnversionedFields 言語、バージョン毎にデータを管理。
VersionedFields 言語ごとにデータを管理。バージョンでデータは共通。 ※「Language」カラムがない。
SharedFields 言語、バージョンでデータは共通。 ※「Language」「Version」カラムがない。

「VersionedFields」は、言語別で管理されるが、バージョン共通のフィールドの値が格納されています。

VersionedFields

「SharedFields」は、言語/バージョン共通のフィールドの値が格納されているのが分かります。
管理画面では以下のように表示されるフィールドが対象となっています。

VersionedFields

いずれも「UnversionedFields」と同じで、「ItemID」にはアイテムID、「FieldId」にはフィールドのアイテムID、「Value」にフィールド値が格納されてるのが分かりました。

まとめ

今回はどのテーブルにどんなデータが格納されているかを説明しました。

Sitecoreではテンプレートの継承が可能であり、定義したテンプレートも「スタンダードテンプレート」を継承しています。本作業で得られる情報は作成したテンプレートに定義されている情報のみであり、継承元の情報は取得していません。継承元の情報も含め、全てのフィールドおよびフィールドセクションの情報を確認する方法は次回以降ご説明させていただきます。

引き続きよろしくお願いいたします!