Movable Type のカスタムフィールドと
MTAppjQuery プラグインで地図座標を管理する
いつも通りすっかりご無沙汰なBUNですが、Movable Type Advent Calendar 2013 の15日目の記事を書きます。
それにしても、約1年ぶりって。。。
雪も降りしきる訳・・・ですね(。-_-。) www
さて、先日 Google Maps JavaScript API v2 の廃止に伴い、過去に制作したサイトで「管理画面に地図は互換表示されてるものの、ジオコーディングが利用できない」ことがありました。
導入していたプラグインに含まれる JavaScript の記述を書き換えることで解消できたのですが、プラグイン自体が既にアップデートされていない・・・という、ままある?状況。
そこで、MT 標準のカスタムフィールドと MTAppjQuery プラグインで地図座標の管理をする方法について共有してみます。
やりたいこと
今回は、(ブログ)記事へカスタムフィールドを追加しつつ、別途用意した JavaScript を読み込ませる形で編集画面に地図を表示させます。あわせて、地図の中心座標やズームレベルの変更にあわせて各フィールドの入力値を変更したり、ジオコーディングで大まかな位置を表示できるようにします。
完成図は、下記のようなイメージです。
なお、 MTAppjQuery プラグインはあらかじめインストールしてある前提で、解説していきます。
カスタムフィールドの追加
はじめに、カスタムフィールドを3つ追加します。
システムオブジェクトは「記事」、種類は「テキスト」とします。
名前:緯度
ベースネーム、および、テンプレートタグ:lat
名前:経度
ベースネーム、および、テンプレートタグ:lng
名前:ズームレベル
ベースネーム、および、テンプレートタグ:zoom
ここで記載しているベースネームとテンプレートタグは、あくまで一例です。
「lng じゃなくて long だろ!」など、思うところがある方はご自由に変更してください w
なお、カスタムフィールドだけを追加する専用テーマを用意しました。
ごちらをご利用の場合は、ダウンロードして ZIP ファイルを解凍後にできるフォルダ(mt)を MT のシステムディレクトリと見立てて、「/themes/」の中身をアップロードしてください。
地図用カスタムフィールド追加テーマ
http://download.d-s-b.jp/MTThemes/theme_cf_googlemaps.zip
アップロード後、任意のウェブサイトまたはブログへテーマを適用します。
JavaScript のアップロードと user.css の修正
導入済みの方はご存知の通り、MTAppjQuery プラグインは「/mt-static/plugins/MTAppjQuery/user-files/」に含まれる JavaScript や CSS を調整してカスタマイズできます。
そこで、Google マップ表示用の JavaScript をこのディレクトリにアップロードして管理することにしましょう。
MTAppjQuery user-files 追加データ
http://download.d-s-b.jp/MTAppjQuery_user-files.zip
ZIP ファイル解凍後、 GoogleMaps.js の2〜11行目をお好みで調整してください。
var lat_basename = 'lat'; // 「緯度」カスタムフィールドのベースネーム var lng_basename = 'lng'; // 「経度」カスタムフィールドのベースネーム var zoom_basename = 'zoom'; // 「ズームレベル」カスタムフィールドのベースネーム var map_wrapper_element = 'map-wrapper'; // 上記3つのカスタムフィールドのラッパーID var map_element = 'gmap'; // 地図を表示させる要素のID名 var map_search_element = 'map-serach-box'; // 「地図を検索」部分のラッパーID var lat_default = 37.400529; //「緯度」の初期値 var lng_default = 140.359743; //「経度」の初期値 var zoom_default = 15; // 「ズームレベル」の初期値
lat_basename・lng_basename・zoom_basename はカスタムフィールドのベースネーム、
lat_default・lng_default・zoom_default には地図座標などの初期値をそれぞれ設定します。
参考までに、 GoogleMaps.js の13行目で「緯度のカスタムフィールドがある場合のみ」それ以降のコードを実行するようにしてあります。
if(jQuery('#customfield_' + lat_basename + '-field').length){
特定のウェブサイト(やブログ)に限定する場合は、ここを調整してください。
// 緯度のカスタムフィールドがあり、かつ、ブログ ID が 2 の場合に限定 if(jQuery('#customfield_' + lat_basename + '-field').length && mtappVars.blog_id == 2){
また、14〜21行目で3つのカスタムフィールドをタイトルの次に並べつつ、ドラッグによるソートを無効にしています。user.js で並び順を制御している場合などは、これらの行を削除してください。
// 必要にあわせてソートを調整 $.MTAppFieldSort({ sort: 'title, c:' + lat_basename + ', c:' + lng_basename + ', c:' + zoom_basename }); jQuery('#customfield_' + lat_basename + '-field, #customfield_' + lng_basename + '-field, #customfield_' + zoom_basename + '-field') .removeClass('sort-enabled') .wrapAll('');
なお、user.css に追記する内容は下記のとおりです。
既に任意のスタイル定義をしている場合は、行末あたりにコピー&ペーストでよいかもしれません。要素の ID 名を変更した場合は、調整をお忘れなく。。。
#gmap { width: 100%; height: 300px; background: #ddd; } #map-wrapper:after, #map-serach-box:after { display: table; content: " "; clear: both; } #map-wrapper > div.field { width: 39%; float: left; margin-right: 1%; } #map-wrapper > div.field:last-child { width: 20%; margin-right: 0; } #map-serach-box { padding: 0.5em 0 1em; } #map-serach-box input { width: 70%; float: left; margin-right: 1%; } #map-serach-box button { float: right; font-size: 12px; }
プラグイン設定の調整
最後に MTAppjQuery のプラグイン設定へ script タグを2つ追加します。
<script type="text/javascript" src="//maps.google.com/maps/api/js?sensor=false"></script> <script type="text/javascript" src="/PATHtoMT/mt-static/plugins/MTAppjQuery/user-files/GoogleMaps.js"></script>
2行目にある mt-static のパスは、適宜修正してください。
個人的には、必要に応じて直後に読み込まれる user.js でゴニョゴニョできるので「変数 mtapp_html_foot に追加(MTAppjQueryのuser.jsの直前)」にセットするのがオススメです。
問題なく設定できていれば、(ブログ)記事の編集画面に Google マップが表示されます。
補足
出力する際は、テンプレートの任意の場所へ従来のカスタムフィールドと同様に MT タグを記述します。
上記は、拙作の jQuery Google Maps プラグインで表示させる場合のサンプルです。
複数マーカーの表示なども比較的簡単に実装できると思うので、よかったら使ってみてください。
jQuery Google Maps プラグイン
http://labs.d-s-b.jp/plugins/jQuery/jQueryGoogleMaps/
お気づきの点などがありましたら、@BUN へご連絡ください。
それでは、また1年後...(。-_-。) <マテ
トラックバック(0)
トラックバックURL : http://gabs.cc/mt/mt-tb.cgi/tb
※お手数ですが、上記URLの「tb」を「64」に置き換えてPingを送信してください。
- Dec 15,2013
- Web
- コメント(0)
- トラックバック(0)
コメントフォーム