package MT::Plugin::GoogleMap; use strict; use MT::Template::Context; use vars qw($VERSION); my $VERSION = '0.35'; my $plugin = new MT::Plugin({ name => "Google Map Plugin", version => $VERSION, doc_link => 'http://enyan.no-ip.com/GoogleMap/', author_name => 'AL-Mail ユーザー俺 (木公)', author_link => 'http://enyan.no-ip.com/alm-ore/', description => '使い方: [GoogleMap:住所;<オプション>] もしくは [GoogleMap:緯度,経度;<オプション>]', }); MT->add_plugin($plugin); ################################### ## ユーザー設定 ################################### my $mapkey = 'ADD YOUR KEY'; #Google Map Key my $prototypepath = 'ADD YOUR prototype.js PATH'; #表示マップの属性 my $mapid = 'map'; #表示マップのID 固定 my $mapwidth = '480px'; my $mapheight = '480px'; #Google Map スクリプトで使う変数 my $zoom = '16'; # 地図のズーム my $marker = 'on'; # 中心のマーカー。on: 表示、off: 非表示 my $overview = 'on'; # オーバービューマップ。 on: 表示、off:非表示 my $scale = 'on'; # 縮尺の表示。on: 表示、off: 非表示 my $lcontrol = 'on'; # 大型コントロールボタン。on: 表示、off: 非表示 my $scontrol = 'off'; # 小型コントロールボタン。on: 表示、off: 非表示 my $typecontrol = 'on'; # 地図/写真切り替えボタン。on: 表示、off: 非表示 my $window = ''; # マーカーをクリックするとフキダシが出る。中の文字列を指定 ################################### MT::Template::Context->add_global_filter (GoogleMap => sub { &ShowGoogleMap }); ################################### ## タグの取得 ################################### sub ShowGoogleMap{ my $contents = shift; $contents =~ s/\[GoogleMap:(.*?)\]/&tag($1)/ge; return ($contents); } ################################## ## データ処理部 ################################## sub tag{ my $randn = int(rand(9999)); my $mapid2 = $mapid . time() . $randn; my $location; # 地点 my $lat; # 緯度 my $lon; # 経度 my @options; # 設定オプション my $address; # 住所で指定されているか # 地点とオプションを分割。地点は必ず初めに無ければならない ($location, @options) = split(';', shift); # オプションの切り分け foreach my $option (@options){ (my $var, my $value) = split(/=/, $option, 2); # オプションのチェック if ($var =~ /mapid/i) { $mapid = $value; } # マップのid if ($var =~ /height/i){ $mapheight = $value; } # マップ領域 if ($var =~ /width/i) { $mapwidth = $value; } # マップ領域 if ($var =~ /zoom/i) { $zoom = $value; } # ズーム if ($var =~ /marker/i) { $marker = $value;} # マーカーを表示する if ($var =~ /overview/i) { $overview = $value;} # オーバービューマップを表示するか if ($var =~ /scale/i) { $scale = $value;} # 縮尺の表示 if ($var =~ /lcontrol/i) { $lcontrol = $value;} # 大型コントロール if ($var =~ /scontrol/i) { $scontrol = $value;} # 小型コントロール if ($var =~ /typecontrol/i) { $typecontrol = $value;} #地図/写真切り替えボタン if ($var =~ /window/i) { # フキダシの文字 if ($value eq '') { $window = $location; #何も指定されていなければ、地点情報 } else { $window = $value; } } } # オプションの整合性チェック if ( $lcontrol =~ /on/i && $scontrol =~ /on/i ){ # 大型、小型コントロールの両方が $scontrol = 'off'; # 指定された場合は、大型優先 } # 表示部分の作成 my $mapscript = "\n"; $mapscript .= "
\n"; $mapscript .= "\n"; $mapscript .= "\n"; return ($mapscript); } ############################################################### ## 変更履歴 ## ## Ver 0.35 ## - オプションに使う文字列の中でイコール(=)を使えるようにした ## - フキダシの中でhtmlを記述できるようにした。 ## - フキダシ表示のバグ (v0.3で混入)を潰した ## - 2006年11月29日 ## ## Ver 0.3 ## - マップ表示部(
) の id に時刻とランダムな数列を入れるようにしました。 ## + 同一ページに複数のタグを貼り付けた場合に、競合しないようにするためです。 ## - 'map' という部分は、オプションで変更できます。; map = <文字列> ## - 2006年11月29日 ## ## Ver 0.2 ## - オプション等の区切り文字をセミコロン (;) に変更 **重要** ## + ただし、緯度、経度の区切りはコンマ (,) のままにする ## - 経緯度のほかに、住所を用いることができる。 ## - マーカークリックでフキダシ: window = <文字列> # 文字列が無いときは、地点情報 ## - 2006年11月28日 ## ## Ver 0.1 ## - タグの中にスペースがあっても認識するようにした ## - オプションの大文字小文字を区別しないようにした ## - オプション項目を増やした。 ## + 中心マーカー; marker = on | off ## + オーバービューマップ; overview = on | off ## + 縮尺; scale = on | off ## + 大型コントロールボタン; lcontrol = on | off # 大型の方が小型より優先 ## + 小型コントロールボタン; scontrol = on | off ## ※不正な文字列の場合は、"on" と見なす ## - 2006年11月28日 ## ## Ver 0.0 ## - リリースした ## - 2006年11月27日