• Home
  • Craft CMS
  • Craft CMS で質問と答えのサービスを作ってみる - STEP03:サンプルデータ投入

Craft CMS で質問と答えのサービスを作ってみる - STEP03:サンプルデータ投入

こんにちは。この記事は「Craft CMS Advent Calendar 2021」8日目の記事です。

Craft CMS を使って質問と答えをやり取りできるサービスをステップ・バイ・ステップで作ってみるという企画をやっていて、今日はその3日目です。

今日は Craft CMS の管理画面でサンプルデータを入れてみようと思います。

プロジェクトを作成

まずは「On The Same Page」というプロジェクトを作りました。「質問・答え」は後で紐付けます。

Clean Shot 2021 12 08 06 36 37

質問・答えを作成

次に「質問・答え」を作成していきます。

初めに質問を作ってみました。これはこんな感じで問題なさそうです。「プロジェクト」は後で紐付けます。

Clean Shot 2021 12 27 08 50 09

続いて「答え」を作ってみます。

Clean Shot 2021 12 27 08 54 01

ん?タイトル?答えのタイトルって何だ?という感じですよね。

質問にタイトルはあっても良いかもしれませんが、答えにタイトルは不要です。しかし必須フィールドになっています。どうすればいいでしょうか?

Craft CMS ではこれを解決する手段も用意されていて、任意のフィールドの値を自動でタイトルフィールドに挿入することができます。

さて、実際にやってみましょう。

質問・答えセクションを編集

「質問タイトル」というテキストフィールドを追加します。フィールドハンドルは「commentTitle」とします。

Clean Shot 2021 12 08 06 46 58
Clean Shot 2021 12 08 06 47 51

これを「質問・答え」セクションに紐付けます。そして「タイトルのフィールドを見る。」のチェックを外し「タイトル形式」のところに、自動で挿入する値を入れます。

Clean Shot 2021 12 27 08 55 35

タイトル形式のところに入っている値は下記の通りです。

{{ object.commentTitle ?: object.body|replace('/\\r\\n|\\n|\\r/', '')|striptags|trim|replace('/(.{25})(.*)/ui', '$1...') }}

ここでの object は Entry に当たります。したがって、上のコードの意味は、commentTitle の値があるときはその値を利用し、ないときは、body フィールドの値から、改行を削除し、HTML タグを削除し、前後の空白を削除し、25文字以上あるときは最初の25文字と...とした値をタイトルとして利用する、ということになります。

なお、Craft CMS には truncate というフィルタがあり、指定した文字数だけ取り出す、ということが出来るのですが、マルチバイト文字だと上手くいかないので上記のように正規表現を利用しています。

改めて質問・答えを作成

さて、この状態で答えを作成しました。

Clean Shot 2021 12 27 08 57 57

ここで、親のエントリとして、この答えに対応する質問を紐付けました。

これらをエントリ一覧で見ると下図のようになります。少し昔ながらの掲示板のようになりましたね。

Clean Shot 2021 12 08 21 18 33

今日はここまでにします。次回からテンプレートを実装していこうと思います。

See you next time 👋