[EE]カテゴリの扱いに関するまとめ

 他のブログツール同様、EEも、カテゴリに属する記事を書いたら勝手にカテゴリページを生成してくれます。

で、これ一応カスタマイズできるみたいなのですが、その挙動がどうもわかりにくいので、まとめてみました。



カテゴリへのリンクの生成



 トップページのサイドバーあたりでカテゴリへのリンクを出したいときは、

{exp:weblog:categories weblog=”test” style=”linear” }

<a href=”{path=main/test}”>{category_name}</a>

{/exp:weblog:categories}

という具合にすれば、カテゴリごとに <a href=”{path=main/test}”>{category_name}</a>


を呼び出してくれます。

Weblog Categories Tag – ExpressionEngine Documentation



通常、これで生成されるリンクは、

http://www.example.com/index.php/main/C1

という具合に、URLの後ろにテンプレートIDがついた物になりますが、

CP Home › Admin › Weblog Administration › Global Weblog Preferences

にある Use Category URL Titles In Links?

をYesにすると、

http://www.example.com//index.php/main/category/Blogging/

というような、カテゴリ名を使ったURLを生成してくれるようになります。



カテゴリページの内容



 上記URLで表示されるページはどういう内容になっているのでしょう?

別に特別なテンプレートがあるわけではなくて、

http://www.example.com/index.php/main/

用のテンプレートで生成されます。



ただ、

{exp:weblog:entries}

で取得できるブログの記事は、該当カテゴリの物だけに制限されます。

結果として、{exp:weblog:entries}を使って普通にindexページを生成しておけば、該当カテゴリの記事だけが表示される、というわけです。



一見便利そうなこの仕組みですが、普通のブログツールを使い慣れたデザイナさんが、「カテゴリページのデザインです♪」とか言ってトップページと異なるデザインを持ってきたとたん、破綻します。

つまりトップページと同じテンプレートがカテゴリページにも適応されちゃうので、両方に対応したテンプレートを書かないといけなくなるわけです。



べつにデザイナーさんが悪いわけではなくて、カテゴリーページにはそのカテゴリの概要を書きたいとか、ごく普通の要望だと思います。



{if segment_2 == “category”}

を使って切り分けながら書いていけば、同じテンプレートを使い分けることも不可能ではないですが、本来全然別のページとしてデザインしている物を同じテンプレートにつっこむのはかなり大変です。



で、どうするかというと、いっそindexテンプレートをこんな内容にしてしまいます。


{if segment_2 == “category”}

{embed=”main/.category”}

{if:else}

{embed=”main/.top”}

{/if}

カテゴリページの時は.categoryを呼び出す、そうでないときは.topページを呼び出します。



こうすれば、カテゴリページ用の内容は.categoryに、トップページ用の内容は.topに書くことができて、シンプルなテンプレートにすることができます。