ステップ・バイ・ステップで Craft CMS を使って質問と答えをやり取りできるサービスを作ってみるシリーズのステップ3です。今日は Craft CMS の管理画面からデータを入れてみます。
こんにちは。この記事は「Craft CMS Advent Calendar 2021」8日目の記事です。
Craft CMS を使って質問と答えをやり取りできるサービスをステップ・バイ・ステップで作ってみるという企画をやっていて、今日はその3日目です。
今日は Craft CMS の管理画面でサンプルデータを入れてみようと思います。
まずは「On The Same Page」というプロジェクトを作りました。「質問・答え」は後で紐付けます。
次に「質問・答え」を作成していきます。
初めに質問を作ってみました。これはこんな感じで問題なさそうです。「プロジェクト」は後で紐付けます。
続いて「答え」を作ってみます。
ん?タイトル?答えのタイトルって何だ?という感じですよね。
質問にタイトルはあっても良いかもしれませんが、答えにタイトルは不要です。しかし必須フィールドになっています。どうすればいいでしょうか?
Craft CMS ではこれを解決する手段も用意されていて、任意のフィールドの値を自動でタイトルフィールドに挿入することができます。
さて、実際にやってみましょう。
「質問タイトル」というテキストフィールドを追加します。フィールドハンドルは「commentTitle
」とします。
これを「質問・答え」セクションに紐付けます。そして「タイトルのフィールドを見る。」のチェックを外し「タイトル形式」のところに、自動で挿入する値を入れます。
タイトル形式のところに入っている値は下記の通りです。
{{ 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
というフィルタがあり、指定した文字数だけ取り出す、ということが出来るのですが、マルチバイト文字だと上手くいかないので上記のように正規表現を利用しています。
さて、この状態で答えを作成しました。
ここで、親のエントリとして、この答えに対応する質問を紐付けました。
これらをエントリ一覧で見ると下図のようになります。少し昔ながらの掲示板のようになりましたね。
今日はここまでにします。次回からテンプレートを実装していこうと思います。
See you next time 👋