Top > 開発ガイド > コンポーネント開発Tips集 > カレンダとの連携
カレンダとの連携
対象バージョン
当ドキュメントはRubricks-0.6.x向けです。
概要
- カレンダと連携するようにコンポーネントを作成することができる
- 連携することで、例えばTodoコンポーネントで登録されたTodoをカレンダ上で閲覧したり、日付をずらしたりできるようになる
- 今回はtodoとカレンダーの連携をサンプルに説明する
作成物
- カレンダ連携をするためには下記ファイルの作成が必要である
- init.rb(vendor配下ではなく、コンポーネント独自プラグインのもの)
- アダプタクラス
RAILS_ROOT/components/コンポーネント名
└component_plugins
└─calendar ・・・ プラグイン名(任意の名称)
│ init.rb
│
└─lib
todo_list_adapter.rb ・・・ アダプタクラス(任意の名称)
init.rbの作成
#init.rb
lib = File.expand_path("#{File.dirname(__FILE__)}/lib")
require_dependency "#{lib}/todo_list_adapter"
RubricksScheduleManager << TodoList::TodoListAdapter
- アダプタクラスをrequire_dependencyで読み込む
- RubricksScheduleManager?にアダプタクラスを登録する
注意:このinit.rbはvendor配下に作成するものではない
アダプタクラスの作成
todo_list_adapter.rb
class TodoList::TodoListAdapter
class << self
def schedules(params)
sync_todos = TodoList::TodoListTodo.find(
:all,
:conditions => [
'sync_calendar_flag = 1 and ' +
'todo_list_category_boxes.rubricks_user_id = ? and ' +
'YEAR(close_on) = ? and MONTH(close_on) = ?',
params[:current_user].id ,
params[:year], params[:month]
],
:include => [:todo_list_category_box]
)
sync_todos.collect do |sync_todo|
#...中略
RubricksSchedule.new(
:id => sync_todo.id,
:start => sync_todo.close_on,
:finish => finish_datetime,
:description => sync_todo.title,
:publicity => true,
:callback => "alert('click!')",
:icon => "/images/components/todo_list/todo_icon_for_calendar.gif",
:icon_for_list => "/images/components/todo_list/todo_icon_for_list.gif",
:removable => true
)
end
end
def change(schedule)
target = TodoList::TodoListTodo.find(schedule.sid)
target.close_on = schedule.start
target.save
{:target => 'html_id' :args => ['/xxx/xxx', 'xxx', {}]}
end
def delete(id)
TodoList::TodoListTodo.destroy(id)
[
{:target => 'html_id' :args => ['/xxx/xxx', 'xxx', {}]},
{:target => 'html_id2' :args => ['/yyy/yyy', 'yyy', {}]}
]
end
end
end
- scheduleメソッドとchangeメソッドをクラスメソッドとして定義する
- scheduleメソッドはカレンダが表示されるときに叩かれるメソッド
- 戻り値としてRubricksSchedule?インスタンスの配列を返却する
- RubricksSchedule?をnewする際のパラメータは下記
- :id => カレンダ連携しているモデルのid
- :start => スケジュール開始日時。DateTime?型。
- :finish => スケジュール終了日時。DateTime?型
- :description => カレンダに表示される文字列。
- :publicity => falseを設定すると鍵アイコンが表示される。デフォルトtrue。
- :callback => スケジュールをダブルクリックされたときに実行されるJavascript。
- :icon => カレンダー上のスケジュールとともに表示されるアイコン
- :icon_for_list => リスト表示のときに表示されるアイコン
- :removable => falseに設定すると削除できなくなる(ゴミ箱アイコンが表示されなくなる)。デフォルトtrue。
- 返却したインスタンスがカレンダに表示される
- 引数のparamsには下記のパラメータが入っている
- :year => 表示されているカレンダーの年
- :month => 表示されているカレンダーの月
- :current_user => ログイン中のrubricks_userオブジェクト
- changeメソッドはカレンダ内でスケジュールの時間が移動したときに叩かれるメソッド
- 移動とつじつまが合うようにデータを変更する
- パラメータのscheduleは対応するRubricksSchedule?オブジェクト
- shchedule.sidでカレンダ連携しているモデルのidが取得できる
- 返り値を渡すことでsimple_render_componentが呼び出し画面を更新することができる
- 返り値は、Hashでtargetとargsを指定する。Hashを複数含んだArrayでもよい。
- target => 更新するHTMLのID
- args => simple_render_componentの引数。配列でcontroller、action、paramsを渡す。
- deleteメソッドはカレンダ内でスケジュールが削除されたときに叩かれるメソッド
- 引数でカレンダ連携しているモデルのidが渡される
- 返り値を渡すことでsimple_render_componentが呼び出し画面を更新することができる
- 返り値は、Hashでtargetとargsを指定する。Hashを複数含んだArrayでもよい。
- target => 更新するHTMLのID
- args => simple_render_componentの引数。配列でcontroller、action、paramsを渡す。
カレンダーブロックを更新する方法
任意のスケジュールを更新したときに、同期を取る場合などに行う
- カレンダーブロックが表示されている場合、リクエストパラメータとして"rubricks_system_calendar"が自動的に送信される
- rubricks_system_calendarパラメータが送られてきた場合は、以下のようにsimple_render_component_as_stringを実行し、その値をレスポンスとして返却する。
- 例: simple_render_component_as_string("/system/calendar", "refresh_detail_calendar", {:rubricks_system_calendar => params[:rubricks_system_calendar]})
- 上記のsimple_render_component_as_stringの戻り値は、Javascript(<script>タグで囲まれていない)文字列。
