calendar_date_select
というのを入れれば勝手にカレンダーを使ってくれるようになります。
インストールは、
gem install calendar_date_select
で。
そして
config/environment.rb
に
config.gem "calendar_date_select"
を追加すれば、もうOKです。
これだけでカレンダーが使えるようになりました。
calendar_date_selectのインストールは、pluginとしてインストールすることもできるようなのですが、どうもgemで入れないとActiveScaffoldではうまく使えない気配です。
これでカレンダーは使えるようになるのですが、このままだと日付の形式が
August 12, 2007
みたいになっていて、ちょっといまいちです。
これを
2007/08/12
の形式にする方法は以下の通りです。
まず
config/environment.rb
に以下を追加します。
CalendarDateSelect::FORMATS[:japanese] = { :date => "%Y/%m/%d", :time => " %H:%M", :javascript_include => "format_japanese" } CalendarDateSelect.format = :japanese
そして
public/javascripts/calendar_date_select/format_japanese.js
というjavascriptを以下の内容で作成します。
Date.prototype.getAMPMHour = function() { hour=Date.padded2(this. getHours()); return (hour == null) ? 00 : (hour > 24 ? hour - 24 : hour ) } Date.prototype.getAMPM = function() { return (this.getHours() < 12) ? "" : ""; } Date.prototype.toFormattedString = function(include_time){ str = this.getFullYear() + '/' + Date.padded2(this.getMonth() + 1) + ' /' +Date.padded2(this.getDate()); if (include_time) { hour=this.getHours(); str += " " + this. getAMPMHour() + ":" + this.getPaddedMinutes() } return str; } Date.parseFormattedString = function (string) { var regexp = "([0-9]{4})(\/([0-9]{2})(\/([0-9]{2})" + "( ([0-9]{1,2}):([0-9]{2})" + "?)?)?)?"; var d = string.match(new RegExp(regexp, "i")); if (d==null) { return Date.parse(string); // Give javascript a chance to parse it. } var date = new Date(d[1], 0, 1); if (d[3]) { date.setMonth(d[3] - 1); } if (d[5]) { date.setDate(d[5]); } if (d[7]) { hours = parseInt(d[7], 10); date.setHours(hours); } if (d[8]) { date.setMinutes(d[8]); } return date; }これは、 http://code.google.com/p/calendardateselect/wiki/ChangingDateFormatCustom とか http://blog.champierre.com/archives/822 とかを参考にさせていただきました。 あとは、カレンダーの曜日とかの表示を日本語にしたり、calendar_date_selectで使えるオプションのforceとかをActiveScaffoldでも使えるようにしたいなぁと思っていますが、まだやり方不明です。
2011/1/17追記
カレンダーを日本語にする方法です。
public/javascripts/calendar_date_select/locale/ja.js
というjavaスクリプトを以下の内容で作成します。
文字コードはUTF-8で保存してください。
_translations = { "OK": "OK", "Now": "現在", "Today": "今日", "Clear": "閉じる" } Date.weekdays = $w("日 月 火 水 木 金 土"); Date.months = $w("1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月" );
そしてlayoutなりActiveScaffoldを使うときに以下のように指定すればOKです。
<%= active_scaffold_includes %> <%= calendar_date_select_includes :locale => "ja" %>ポイントは、active_scaffold_includesの後にcalendar_date_select_includesすることです。
active_scaffold_includesを呼べば、内部でcalendar_date_select_includesを呼んでいるので指定しなくても利用できるのですが、内部で呼んでいる時にはlocaleを渡していないので後で再度指定しちゃいました。
あとcalendar_date_selectには、テキストボックスにテキストを直接入力させずに、必ずカレンダーをクリックして入力させるoptionを指定できるのですが、ActiveScaffoldを利用しているときは、以下のようにoptionを渡します。
ちなみにopened_atが日付型のフィールドだと思ってください。
config.columns[:opened_at].options = {:popup => "force"}
0 件のコメント:
コメントを投稿