各カテゴリへのアクセスはカテゴリIDを用いた URL だったのですが、これをカテゴリ名でアクセスできるように変更してみました。例えば僕のブログで book カテゴリへは、これまでは
http://matatabi.homeip.net/blog/setomits/categorylist_html?cat_id=17
という URL でアクセスするようにしていたのですが、これを
http://matatabi.homeip.net/blog/setomits/categorylist_html?cat_name=book
という URL でアクセスできるようにしたのです。これまで通り ID でのアクセスももちろん可能です。
このために、 blog_header の最初の方に以下の記述を追加しました。
<dtml-if cat_name>
<dtml-in category_list>
<dtml-if "name==cat_name">
<dtml-call "REQUEST.set('cat_id',str(id))">
</dtml-if>
</dtml-in>
<dtml-elif cat_id>
<dtml-with "getCategory(id=cat_id)">
<dtml-call "REQUEST.set('cat_name', name)">
</dtml-with>
</dtml-if>
要するに、クエリーストリングに cat_name があれば cat_id をセットし、 cat_id があればそれに応じた cat_name をセットしているのです。

あとは、 entry_body や modules/category などの
...
<a href="<dtml-var blogurl>/categorylist_html?cat_id=<dtml-var id>"><dtml-var name></a>
...
のような箇所を
...
<a href="<dtml-var blogurl>/categorylist_html?cat_name=<dtml-var name>"><dtml-var name></a>
...
というように変更しました。

URL は必ずしもヒトのためではないですが、まあわかりやすいにこしたことは無いかなと。
ただ、このままでは name から id をセットするところで、適当なのがみつかった後も最後までループが回り続けています。これは無駄なのでちゃんと break したいのですが、DTML では <dtml-break> みたいなのは無いようです。やっぱりフラグを使って break するのでしょうか。
Posted by setomits at 09:12 | Comments: 0
Leave a comment
Required fields are marked with *
search
calendar
Feb 2012
SunMonTueWedThuFriSat
   1234
567891011
12131415161718
19202122232425
26272829   
archives
photos on flickr
www.flickr.com