MODxでCMSの恩恵を賜りつつ、validを保ち、かつWEB標準化を目指そう
Welcome !! Now 2012.02.05 00:29 (JST)
GoogleMapMarker は、Google Map をドキュメントに挿入するスニペットです。このバージョンでは、マーカー出力のためにDitto2.x 以上が必要になります。
旧バージョン(GoogleMapMarker Ver1.0c) では、ポップアップ用のドキュメントの書き方にいくつか制限があったのですが、このバージョンでは解消されています。
参照ページ:GoogleMapMarker 1.0c for ditto v2+
また Ditto のバージョンは、2.0.2、2.1bata で確認しました
[!GoogleMapMarker? &apiKey=`ABQI...`!]
ドキュメントのキャッシュは「可」で、動作しますが、スクリプトが2重に挿入されるかもしれません。その場合でも、動作に問題はないようですが、気になる場合は、ドキュメントのキャッシュを不可にすると、スクリプトが2重に挿入される現象を回避できます。
モディファイアはスニペットとして作成します。以下の様式で作成してください
<?php
return addcslashes(preg_replace("~([\n\r\t\s]+)~"," ",$output), "'");
?>
※尚、Ditto 2.x系が、PHxファンクションを独自にサポートしているため、別途PHxプラグインを導入する必要はありません※
旧バージョン(GoogleMapMarker Ver1.0c)では、上記の機能がなかったために、ポップアップする説明を「内容」に書く際、以下の制限がありました
上記の制限を守らないと、地図が表示されませんでした。これは、JavaScriptを動作させる際の制限によるものと思われます。
バージョンアップにより、PHxファンクションが導入され、これらの制限を回避することができるようになりました。
[[GoogleMapMarker? &apiKey=`ABQIAAAA...`]]
等GoogleMap Call 用ドキュメント(公開) └ マーカー用ドキュメント(非公開) └ マーカー用ドキュメント(非公開) └ ... (非公開)
スニペットを変更します
$script .= $modx->runSnippet($dittoName,array('descendentDepth'
=> $descendentDepth, 'sortBy' => $sortBy, 'sortDir' => $sortDir, 'summarize'
=> 'all', 'displayArchive' => '0', 'tpl' => $dittoChunk, 'startID' =>
$startID, 'showPublishedOnly' => '0', 'trunc' => '0'));
上記の「'showPublishedOnly' => '0'」を「'showPublishedOnly'
=> '1'」に変更します。
GoogleMaps API key を指定します。
スニペット中のサンプルには、「&apikey=`...`」となっていますが、正しくは「&apiKey(K は大文字)」。
AIP keyは、「http://www.google.com/apis/maps/signup.html(英語)」で入手できます。
マーカードキュメントが所属する親ドキュメントのIDを指定します。
Ditto でリストアップしますので、Ditto の「parents」パラメータと同じようなものと思っていいでしょう。デフォルト「なし」。
Ditto に依存するので、php の設定で「short_open_tag Off」としている場合、デフォルトのDitto 2.0.2 では、エラーを起こし地図を表示できません。 この場合、「confings/default.confing.php」の以下を修正することにより解決できます。
<?
// Use the following syntax $param = 'value';
?>
↓
<?php
// Use the following syntax $param = 'value';
?>
Ditto の出力する RSS でもパースエラーを起こしているはずなので、GoogleMapMakarを使用しない場合も、Ditto側の修正事項としてあらかじめ修正しておいた方が良いでしょう。
参照:MODx0.9.6の問題点と対策:feed.rss にアクセスすると、パースエラーが表示される
マーカーとして取得するドキュメントの階層を指定します。デフォルト「1(1階層のみ)」。「0」を指定するとすべての階層から取得するようです。
マーカーを並べ替える際、基準とするフィールドを指定します。デフォルト「createdon」。「menuindex」などでも並べ替えられます。
降順(DESC)か昇順(ASC)かを指定します。デフォルト「ASC(昇順)」。
GoogleMap 用のテンプレートを指定します。デフォルトは以下です。
<div id="'.$mapDiv.'" style="float:left; width: 350px; height: 350px;">Loading map...</div>
<div id="'.$linksDiv.'" style="margin-left: 10px; padding-right: 10px; float: left; display: block; height: 350px; overflow: auto;"></div>
<noscript>
<b>JavaScript must be enabled in order for you to use Google Maps.</b>
However, it seems JavaScript is either disabled or not supported by your browser.
To view Google Maps, enable JavaScript by changing your browser options, and then
try again.
</noscript>
テンプレートは、必ず、2つの<div>~</div>ブロックが必要です。すなわち、マップを表示するための<div>~</div>ブロック、および、マーカーリストを表示するための<div>~</div>ブロックです。
また、tpl を指定した場合は、tpl 中で指定した地図表示用のブロックの<div>のidと後述の「&mapDiv」の値、及び、リスト表示用のブロックの<div>のidと「&linksDiv」の値を同一にして下さい。そうしないと地図が表示されなくなります。
<div id="maparea">Loading map...</div> // 地図表示用ブロック
<div id="maplinksarea"></div> // リスト表示用ブロック
上記の場合であれば、スニペットコールで、それぞれ「&mapDiv=`maparea`」「&linksDiv=`maplinksarea`」を指定します。
また、地図表示用ブロックには、CSS で widht と height を指定する必要があります。以下のようにインラインで定義しても構いませんし、外部スタイルシートに定義しても良いです。
<div id="maparea" style="width: 440px;height: 350px;">Loading map...</div>
マップ表示用 <div> の id を指定します。デフォルト「map」。
「&tpl」で指定したidと同じ値を指定します。「&tpl」で指定したidが「map」であるならば、省略して構いません。また、tplを指定しない場合も省略できます。
tpl を指定しない場合で、この値を「map」以外の値にすると該当箇所の値が変更されます。
<div id="maparea">...</div>
マーカーリスト表示用 <div> の id を指定します。デフォルト「maplinks」。
「&tpl」で指定したidと同じ値を指定します。「&tpl」で指定したidが「maplinks」であるならば、省略して構いません。また、tplを指定しない場合も省略できます。
tpl を指定しない場合で、この値を「maplinks」以外の値にすると該当箇所の値が変更されます。
<div id="maplinksarea">...</div>
各マーカー用のタグに挿入するクラス名を指定します。デフォルト「maplink」。
// add a line to the sidebar html
sidebar_html += '<div class="maplink"><a href="javascript:void(0)" .....'</a></div>';
i++;
地図のタイプを指定します(マップタイプボタンの選択状態を指定します)。デフォルト「normal(地図を表示)」。以下を指定できます。
※ボタンデザインは「Map design aid」で確認できます。
地図を表示する際の最初の中央座標を指定します。デフォルト「63.098332,23.056698」(フィンランドの方らしい?)。ちなみに新宿駅は「35.690137,139.700003」くらいです。「Map design aid」で確認できます。
最初の縮尺レベルを指定します。デフォルト「8」。数が大きいほど、拡大された地図になります。「Map design aid」で確認できます。
マップコントロールの大きさを指定します。デフォルト「large」。以下を指定できます。
※コントロールのデザインは「Map design aid」で確認できます。
マップタイプボタンの大きさを指定します。デフォルト「large」。以下を指定できます。
※ボタンデザインは「Map design aid」で確認できます。
マーカの上をマウスカーソルが通過したときインフォメーションボックスを開くかどうかを指定します。デフォルト「しない(0)」。
マーカーをクリックしたときインフォメーションボックスを開くかどうかを指定します。デフォルト「する(1)」。
マーカーリンクの上をマウスカーソルが通過したときにインフォメーションボックスを開くかどうかを指定します。デフォルト「しない(0)」。
マーカーリンクをクリックしたときインフォメーションボックスを開くかどうかを指定します。デフォルト「する(1)」。
オーバービューマップを利用するかどうかを指定します。デフォルト「する(1)」。
オーバービューマップを利用するとき(showOverviewMap=`1`のとき) のサイズを指定します。デフォルト「150,
150」。
オーバービューマップを利用するとき(showOverviewMap=`1`のとき)、最初に地図を表示したときに、オーバービューマップを隠した状態にするかどうかを指定します。デフォルト「する(1)」。
Ditto のスニペット名を変更している場合、指定します。デフォルト「Ditto」。
座標を調べたり、地図の大きさや、縮尺、コントロールの大きさなどを視覚的に確認できる「Map design aid」が便利です。
また、日本にも、座標を取得できるツールがいくつかあります。二つほどご紹介しておきます。
<div class="g-maparea">
<div id="map2">Loading map...</div>
<div id="maplinks2"></div>
</div>
div.g-maparea {
margin-botttom:1em;
margin-left:36px;
color:#333;
}
div.g-maparea #map2 {
width: 400px;
height: 400px;
float:left;
border:3px double #CC0;
}
div.g-maparea #map2 h4 {
color:#333;
}
div.g-maparea #maplinks2 {
margin-left:420px;
}