今日はサイトマップを作った。ページ生成の流れは
とまぁ、こんな感じ。XSLにも慣れてきて数分でできた。
XSLでは、
URLに{PREFIX}を含み、{PREFIX}よりも前の文字列が空、{PREFIX}よりも後ろに / を含まない
(つまり、{PREFIX}hoge という形式のURLのみを選択)
という条件で、for-eachを回し、抽出されたページのURL + / を 新しい{PREFIX}として
再帰的にテンプレートを呼び出し・・・という仕組みで階層構造に変形してる。
(もちろん最初のテンプレート呼び出しは {PREFIX}=/ )
でもいくつか問題もあって、ページはIDで一意に識別していてURLとは独立しているんだけど
サイトマップにはURLも表示しなくちゃいけない。となると、多対1の関係にあるURLとIDから、
IDに対応するURLをひとつだけ抽出しなくちゃいけない。現在はSQLの GROUP BY を使ってごまかしているけど
StartPageがこっちの短いURLじゃなくてこっちの長いURLが選択されちゃってる。
なるべく一回のSQL実行で短いURLを選択するようにできないかなぁ・・・
残る作業は、メモに対してコメントをつける機能とか、このメモをRSSとかで配信できるようにぐらいかな…
あとはサイトマップを開くと悲しい量のページ数なので、何かソフトを作ってページを増やしたいなぁ