質問

インフォメーションウィンドウを使用して、Googleマップにマーカーのグループを追加しようとしています。私はこれを行うためにPHPとJavaScriptの組み合わせを使用しています。PHPはデータベースからすべてのレコードを取得し、JavaScriptはデータベースから取得した座標ですべてのマーカーをマップに追加します。

これが私がこれまでに持っているものです:

<script type="text/javascript">
        function initialize() {

            var latlng = new google.maps.LatLng(<?=$lat?>, <?=$long?>);

            var settings = {
                zoom: 12,
                center: latlng,
                mapTypeControl: false,
                navigationControl: true,
                navigationControlOptions: {style: google.maps.NavigationControlStyle.SMALL},
                mapTypeId: google.maps.MapTypeId.ROADMAP};
            var map = new google.maps.Map(document.getElementById("map_canvas"), settings);

            var postcodeLogo = new google.maps.MarkerImage('/images/postcode_marker.png',
                new google.maps.Size(32,37),
                new google.maps.Point(0,0),
                new google.maps.Point(15,34)
            );

            var propertyLogo = new google.maps.MarkerImage('/images/property_marker.png',
                new google.maps.Size(32,37),
                new google.maps.Point(0,0),
                new google.maps.Point(15,34)
            );

            var infowindow = new google.maps.InfoWindow();  

            <?
            foreach ($results as $grid_refs)
            {
            ?>          

                    var propPos = new google.maps.LatLng(<?=$grid_refs['grid_ref']?>);

                    propMarker = new google.maps.Marker({
                        position: propPos,
                        map: map,
                        icon: propertyLogo,
                        title:"<?=$grid_refs['sd_name']?>",
                        zIndex: 3});

                    var contentString = '<div style="font-weight:bold;"><?=$grid_refs['sd_name']?></div><div><img src="www.imagelink.com/<?=$grid_refs['image_filename']?>"></div><div><a href="http://www.pagelink-<?=$grid_refs['property_id'];?>/" target="-blank">See full details</a></div>';

                    google.maps.event.addListener(propMarker, 'click', function() {
                            infowindow.setContent(contentString);
                            infowindow.open(map,this);
                        });

            <?
            }
            ?>


            var positionPos = new google.maps.LatLng(<?=$lat?>, <?=$long?>);

            var positionMarker = new google.maps.Marker({
                position: positionPos,
                map: map,
                icon: postcodeLogo,
                title:"<?=$_GET['searchpostcode']?>",
                zIndex: 3});


        }
    </script>

ポジショニングマーカーは、ユーザーが検索したい郵便番号に入る場所です。プロップマークは、マップ上のすべての場所をマークし、その後表示されます。

コードではすべての情報が表示されていますが、マップには、最後の取得レコードで開きます。ここで、そのマーカーに関連する情報をロードしたい場合があります。

私はこの質問を見ました:

Googleは、マーカーに最後のレコードのみをロードするInfowindowのみをマッピングします

これは機能しますが、PHP Foreachで動作するループ用のJSを取得できないようで、PHP Foreachおよび外部で試しました。

私が必要とするのは、マーカーを作成するたびに変数とコンテンツの名前を変更するための検索ループだと思いますが、私はこれを機能させることができますか?

どんな助けも感謝します!

役に立ちましたか?

解決

起こることは、すべてのマーカーをループすることですが、最後の反復では、コンテンツストリングに設定したコンテンツがすべてのクリックイベントに使用されるものになります。

代わりに、これを別の関数に委任します(または閉鎖を使用)

            <?
            foreach ($results as $grid_refs)
            {
            ?>          

                    var propPos = new google.maps.LatLng(<?=$grid_refs['grid_ref']?>);

                    propMarker = new google.maps.Marker({
                        position: propPos,
                        map: map,
                        icon: propertyLogo,
                        title:"<?=$grid_refs['sd_name']?>",
                        zIndex: 3});

                    var contentString = '<div style="font-weight:bold;"><?=$grid_refs['sd_name']?></div><div><img src="www.imagelink.com/<?=$grid_refs['image_filename']?>"></div><div><a href="http://www.pagelink-<?=$grid_refs['property_id'];?>/" target="-blank">See full details</a></div>';

                    // add an event listener for this marker
                    bindInfoWindow(propMarker, map, infowindow, contentString);
            <?
            }
            ?>

次に、新しい関数を追加します。

function bindInfoWindow(marker, map, infowindow, html) {
    google.maps.event.addListener(marker, 'click', function() {
        infowindow.setContent(html);
        infowindow.open(map, marker);
    });
} 
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top