2009年3月20日 星期五

Jifty - GoogleMap Plugin

Jifty 提供了 GoogleMap 的 Plugin 提供了 GeoLocation 的屬性能夠讓你在 column 存放位置資訊,並且能讓你輕易的將 GoogleMap 畫出來。

在 etc/config.yml 內設定 GoogleMap Plugin ,並提供 apikey :

||   17   Plugins:
|| 18 - GoogleMap:
|| 19 apikey: ABQIAAAA66LEkTHjdh-UhDZ_NkfdjBTb-vLQlFZmc2N8bgWI8YDPp5FEVBTjCfxPSocuJ53SPMNQDO7Sywpp_w
接著只需要在 Model 的 Schema 內新增 GeoLocation 屬性的欄位 (此屬性是由 GoogleMap Plugin 提供):
column location => is GeoLocation;
新增此欄位的 Model 變可以將位置存入 location 這個 accessor.

my $user = MyApp::Model::User->new;
$user->location( { x => 100 , y => 20 } );

順帶一題,使用 GoogleMap Plugin 在 Render 此附有 GeoLocation 屬性的 Model Action
時,此欄位會以 Jifty::Plugin::GoogleMap::Widget 來做 Render.

# 註: Model 會透過 Class Loader 自動為你的 Model 提供 "Create", "Search",
# "Update", "Execute", "Delete" 等 Action 如 CreateUser, UpdateUser .. etc . 不需要自己另外寫 Action.

也就是說,當你使用以此 Model 為 Record 的 Action 做 render 時,他會自動將 GoogleMap render 出來。

譬如說:

my $update = Jifty->web->new_action( 
class => 'UpdateUser',
moniker => 'update-user',
record => $user,
);
$update->form_field( 'location' )->render_widget;


# 更正: GeoLocation 並非 Jifty::DBI 內建,而是由 GoogleMap Plugin 提供的 Virtual Column. 謝 clkao 長輩指正。