category

Craft CMS のテンプレートでのURLとセクション・エントリのURLについて

2019-06-28

Craft CMS の場合 templates/ にテンプレートを置くとURLを書いてアクセスできるようになります。

こんなかんじで contact/index.html のテンプレートをおいたとします。

このときは以下の3つでアクセスできるようになります。

https://bit-part.net/contact
https://bit-part.net/contact/
https://bit-part.net/contact/index.html

どれにするかは運用ルールにもよると思います。

canonicalにも想定しているURLを記載しつつとかにするのが良いのかもなぁ、と思います。

URLをスラッシュありなし統一するとかは @tinybeans のエントリが参考になります。

Craft CMS の URL をスラッシュありに統一する | Craft CMS | かたつむりくんのWWW
https://tinybeans.net/blog/201...

テンプレートのURLとエントリのURLがかぶるときの優先順位

そのURLの絡みで、Craft CMS のストラクチャでページを作っていて、同じURL(/contact/)になるようにテンプレートを置いたらどうなるんだろう?と疑問に思ったので @BUN にきいてみました。

試しに実際にやってみたところはストラクチャのエントリのほうが優先されました。

これについて記載されているのは以下のルーティングのドキュメントが参考になります。

ルーティング | Craft 3 ドキュメント
https://docs.craftcms.com/v3/j...

0, 1, ... と記述がありますが、webroot にある場合はそれが優先されますが、そこだとテンプレートは処理されないので、そこは一旦おいておきます。

今回の場合は
「2 それはエレメントリクエストか?」
にストラクチャのエントリが当たるのでこれが優先されている、ということになります。

テンプレートの場合は
「4 URI がテンプレートとマッチするか?」
になりますね。

テンプレートがあるのでルーティングを設定してURLに応じてテンプレートの内容を表示させようとしても
「3 URI がルート、または、URI ルールにマッチするか?」
になるので、やはりストラクチャのエントリが優先されます。

エントリ同士でURLがかぶることはないですが、テンプレートとかで意図せずかぶってしまうこととかはあるかもしれないです。

そういったときには期待した表示にならないと思いますので、まずはデータの方を確認して見る必要がありそうです。