これは Craft CMS Advent Calendar 2020 1日目の記事です。
Craft CMS では、セクションごとの エントリ URI 形式
にセットした内容に応じてエントリ詳細ページの URL が決定します。news/{id}
のように入力データに依存しない形式であれば問題ありませんが、カテゴリパスを加えたい場合ひと工夫が必要です。
そこで今回は、複数階層のカテゴリパスを エントリ URL に加える方法について解説します。
事前準備
セクションの エントリ URI 形式
を調整するにあたり、事前に カテゴリグループ
と カテゴリフィールド
を用意し、セクションの入力タイプにセットしておきます。
カテゴリグループの作成
ここでのポイントは カテゴリ URI 形式
に
{parent.uri ? parent.uri ~ '/' : ''}{slug}
と入力している点です。これにより、階層構造を持つ場合に親カテゴリのパスを引き継ぐようになります。
カテゴリフィールドの作成
ここでセットした ハンドル
は エントリ URI 形式
で利用しますので、覚えておいてください。
セクション設定の調整
ここでのポイントは エントリ URI 形式
に
news/{newsCategory.inReverse().one().uri}/{slug}
と入力している点です。
newsCategory
は事前に作成したカテゴリフィールドを指し、.inReverse().one().uri
で逆順にした最初の(つまり、選択された末端の)カテゴリの URI がセットされます。
エントリ一覧に表示させた URI で、期待通りのパスになっていることを確認できました。
まとめ
今回はエントリに紐づいた カテゴリ
を利用しましたが、URI を取得できるものであれば、関連づけられた他のエレメントでも同様の設定が可能です。
また URI 形式
の入力欄に Twig フィルタも使えますので、news/{postDate | date('Ymd-Hi')}
のように投稿日時を整形して出力するなど、お好みで調整してみてください。