ATGoogleMaps 0.5.2でコメントを有効にするとマーカーが表示されない
ATGoogleMapsとTugboat.GTDの連携をするため、弄りすぎたのか、それとも元々あったバグなのか分かりませんが、コメントを有効にして、地図にコメントをします。
ここまではOKなのですが、さらに、コメントにコメントをすると地図は表示されますがマーカーが表示されないことが判明しました。
HTMLをソース表示するとマーカー部分のJavaScriptがありません。スクリプトを見ると次のようになっています。:
## Script (Python) "gmap"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=
##title=
##
print '<script type="text/javascript">'
print "//<![CDATA["
print "window.onload = function() {"
print " if (GBrowserIsCompatible()) {"
print " var map = createMap('map', %s, %s, %d, '%s', %s, %s, %s, '%s');" % (
context.center['latitude'], context.center['longitude'],
context.zoom, context.mapControl,
str(context.typeControl).lower(),
str(context.scaleControl).lower(),
str(context.overviewControl).lower(),
context.mapType,
)
for marker in context.objectValues(['GMarker']): <-- ここに注目!!
try:
latitude = marker.point['latitude']
longitude = marker.point['longitude']
print " addMarker(map, '%s', %s, %s);" % (marker.id, latitude, longitude)
except:
continue
print " }"
print "}"
print "//]]>"
print "</script>"
return printed
このPythonスクリプトはZopeページテンプレートから呼び出され、マップとマーカーを生成するためのJavaScriptを生成するようです。
マップはフォルダタイプのオブジェクトなので、その中にマーカーオブジェクトを入れているのですね、地図の中にあるマーカーオブジェクトのシーケンスを作ってaddMarker()というJavaScript関数の呼出し文を生成しています。
ところが、コメントにコメントをするときcontextは地図ではなくて最初のコメントになります。コメントはフォルダタイプでないので中身はありません(多分)、ましてやマーカーなど入っていませんので当然マーカーが表示されないことになります。
昨日までの体調不良状態でしたら、きっと何もしなかったのでしょうが、今日は少し調子がいいのでマーカーを表示するようにしました。
コメントをするとき、トップのPloneから現在のcontextまでのパスを走査して地図があると(メタタイプで判断、メタタイプが何だかよく分かりませんが)マーカーを生成するときのcontextを強制的にその地図のオブジェクトに変更してみました。
すると、コメントのコメントのコメントのコメントであっても地図にマーカーが表示できるようになりました。うひ!!
効率の良さを考えて、現在のcontextから親のオブジェクトを辿っていく方法もやってみましたが、うまくいきませんでした。「このコンテンツを表示するための権限不足」などとPloneが言います、管理者でログインしているのに、バーロ!!。
- Category(s)
-
Plone
-
tugboat.GTD
- The URL to Trackback this entry is:
- http://papasan.org/papablog/609/tbping
(トラックバック元のページには"Papasan"や"papasan"または言及リンクの記述が必要です。)