Множественная карта Google с циклом php - PullRequest
1 голос
/ 14 июня 2011

Я пытаюсь отобразить несколько карт с помощью цикла php, но я не могу заставить его работать здесь, код урезан ...

    <!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <title>Google Maps JavaScript API Example</title>
    <script src="http://maps.google.com/maps?file=api&amp;v=2&amp;sensor=true&amp;key=ABQIAAAA5iXFaQoABBiRl7JNx5HFuxSa5RD4FXABRIVtLveK1-E6gmai7BR1Y63hhzwAO9ZPoNDgLDBQ_Z6B4Q" type="text/javascript"></script>


  </head>
  <body onload="load()" onunload="GUnload()">


    <?php

    if($_POST['select'] == "place"){

    $posts = $facebook->api("/search?q=".urlencode($_POST['search'])."&type=".urlencode($_POST['select'])."&center=".urlencode($_POST['center'])."&distance=".urlencode($_POST['distance'])."");

    //print_r($posts);
    $num = "1";
    $num2 = "1";
    foreach($posts as $v) {

        foreach($v as $v2) { ?> 

        <div>
        <script type="text/javascript">

    //<![CDATA[
    function load() {
      if (GBrowserIsCompatible()) {
        var map = new GMap2(document.getElementById("map-<?php echo $num++; ?>"));
        map.setCenter(new GLatLng(<?php echo $v2['location']['latitude']; ?>, <?php echo $v2['location']['longitude']; ?>), 13);
      }
    }
    //]]>
         <div id="map-<?php echo $num2++; ?>" style="width: 500px; height: 300px"></div>
        <p><?php echo $v2['location']['latitude']; ?></p>
        <p><?php echo $v2['location']['longitude']; ?></p>
        </div>
        <?php

        }

    }


    }

    }

    ?>



  </body>
</html>

Я пытался поместить javascript в цикл, но это не работает.

Кто-нибудь получил какие-либо предложения в данный момент, он покажет только последнюю карту в цикле ???

Спасибо

1 Ответ

2 голосов
/ 15 июня 2011

Я могу сказать вам, почему это не работает.Вы переопределяете одну и ту же функцию load () каждый раз в цикле.Поэтому, когда документ загружается и вызывается load (), он просто отображает последнюю карту.Кстати, вы должны также использовать Google Map V3 API вместо V2, но это другая тема.

Что-то вроде этого должно исправить это.Сначала поместите это в раздел :

<script type="text/javascript">
var loaders = [];
function load() {
    for (var i = 1; i < loaders.length; i++) {
        loaders[i]();
    }
}
</script>

Затем измените ваш цикл на:

foreach($posts as $v) {

    foreach($v as $v2) { ?> 

    <div>
    <script type="text/javascript">

//<![CDATA[

loaders[<?php echo $num; ?>] = function() {
  if (GBrowserIsCompatible()) {
    var map = new GMap2(document.getElementById("map-<?php echo $num++; ?>"));
    map.setCenter(new GLatLng(<?php echo $v2['location']['latitude']; ?>, <?php echo $v2['location']['longitude']; ?>), 13);
  }
};
//]]>
     <div id="map-<?php echo $num2++; ?>" style="width: 500px; height: 300px"></div>
    <p><?php echo $v2['location']['latitude']; ?></p>
    <p><?php echo $v2['location']['longitude']; ?></p>
    </div>
    <?php

    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...