typoを導入してみる


Railsで作成したblogシステム「typo」を触る機会があったので、忘れないうちにメモ。
今回はインストールまで。

インストールは簡単で、

  1. gem install typo
  2. typo install blogs

でできます。ただ、2.を実行するとmigrateまでやってくれるので、DB設定が違っているとエラーがでます。
そのため、2.を実行した後、

  1. rake gems:refresh_specs
  2. rake db:create
  3. rake db:migrate

を実行しました。
後はサーバを立ち上げるだけ。

初回アクセス時にはユーザ登録画面が出るので、ユーザ登録すれば使えるようになります。

国際化

typoは一応日本語対応になっていますが、デフォルトで用意されているのは翻訳サイトを使ったような感じの日本語で、お世辞にもいい訳とは言えません。

で、世間にはこれを使えるレベルまで直してくれている人がいますので、今回はそれを使わせていただきました。本当にありがとうございますm(_ _)m

http://ja.verbmode.net/2008/11/26/changing_typos_theme



※ここからが本題

日本語のタイトルだと個別画面が表示されない

typo-5.3.0にはバグがありまして、日本語でタイトルを書くと個別画面が表示できなくなります。
どうやらtypo-5.3.0から導入したparmalinkが悪さをしているようです。
直し方はgoogle先生に聞くといくつか出てきますが、ひとまずここを参考に修正しました。


http://blog.usagee.co.jp/2009/06/30/typo5-3%E3%81%AEurl%E3%82%92%E6%97%A5%E6%9C%AC%E8%AA%9E%E5%AF%BE%E5%BF%9C%E3%81%95%E3%81%9B%E3%82%8B%E6%96%B9%E6%B3%95


ということで、app/models/article.rbを修正。

@@ -272,7 +272,7 @@
 date_range = self.time_delta(params[:year], params[:month], params[:day])
 req_params = {}
 if params[:title]
 -  req_params[:permalink] = params[:title]
 +  req_params[:permalink] = CGI.escape(params[:title].tr(FROM,TO).gsub(/<[^>]*>/, '').to_url)
 end

 if date_range

ただ、これを修正したとき、ある特定の記事で1回目は普通に表示されるが2回目以降はダウンロードダイアログが出て表示されないという現象が出ました。これの修正に一日くらい頭を抱えていました・・・。


で、わかったことはtypoは1回目のアクセス時にpublicフォルダ以下に静的HTMLを生成し、2回目以降はそっちのファイルを読みにいってたんですね。ただ、このときタイトルparmalink名がそのままファイル名になっていたので、タイトルをエンコードしたときにXXX.htmlの形にならずにHTMLファイルとブラウザ側が認識せず変なことになっていました。


結局根本的な解決にはなりませんが、parmalinkに日本語を入れないように指定するのが一番簡単かなと思い、新規登録画面で予めparmalinkを指定するように修正しました。

#app/controllers/admin/content_controller.rbの157行目に追記
 else
  @article.parmalink = Time.new.strftime("%Y%m%d%H%M%S")


登録画面表示時の日付を秒単位まで利用すれば、まずparmalinkは被らないと思うので問題はないでしょう。


それにしてもtypo-5.3は、運用でカバーできそうな細かいバグがちらほら見受けられるなあ。