Данные MySQL в javascript с использованием цикла foreach в PHP (Googlel Maps API) - PullRequest
1 голос
/ 11 мая 2011

Я пытаюсь использовать API Карт Google V3 для создания маркеров на карте Google.У меня есть координаты маркеров в базе данных mySQL, и в настоящее время я нахожусь в массиве PHP в моем файле .php.Теперь, как мне использовать цикл foreach () (или другой подходящий метод) для циклического прохождения элементов в моем массиве PHP и создания нового маркера карты Google с каждой итерацией цикла?

PS: Мой PHP - этоПриличный, но не мои знания JavaScript.Учебник по созданию маркеров, которому я сейчас следую, находится по адресу http://www.svennerberg.com/2009/07/google-maps-api-3-markers/

Код

Я использую платформу Codeigniter, поэтому файл "контроллер + модель" уже полученнеобходимые данные (name, lng, lat ...) в массив $ map.Я могу зациклить массив, используя обычный метод:

foreach($map as $row) {
    $lng = $row[lng]  // this is not necessary, its just to show what is in the array
    $lat = $row[lat]
    // now how do I use this loop to create new marker code in javascript?
}

Код JS для создания маркера карты Google, который должен быть создан один раз за каждую итерацию цикла foreach, выглядит следующим образом:

var map = new google.maps.Map(document.getElementById('map'), {  
zoom: 7,  
  center: new google.maps.LatLng($lng, $lat),    // how do i pass the PHP variables into the JS code?  
  mapTypeId: google.maps.MapTypeId.ROADMAP  
});

Поэтому мой вопрос заключается в том, как передать переменные PHP в массиве PHP для создания приведенного выше кода JS, один раз за каждую итерацию цикла foreach ()?

Ответы [ 5 ]

2 голосов
/ 11 мая 2011

Прежде всего, вы на правильном пути, но вам просто нужно понять отдельные понятия серверных и клиентских языков и как они могут взаимодействовать.PHP не «передает» переменные в JavaScript, но он генерирует любой HTML-документ, который вы хотите.

Этот HTML-документ может содержать JavaScript, который будет выполняться, поскольку страница отрисована браузером.Итак, представьте, что ваш PHP делает код JavaScript:

Пример вывода PHP-кода JavaScript на HTML-странице:

<script type="text/javascript">
     var testval = "<?php echo "Hello, " . (5 + 3) . "!" ?>";  // "Hello, 8!
</script>

СейчасЯ посмотрел учебник, и на самом деле код в вашем вопросе - это не тот код, а код для создания карты, а параметры lat / long в вашем примере для центра, а не для маркера.

Итак, на вашей странице PHP вы хотите сделать следующее:

  1. Где-то вам нужно создать карту: var map = new google.maps.Map... (как показано в руководстве)
  2. Затем получите массив $map с элементами массива, содержащими ключи 'lng' и 'lat'. (Примечание: вы всегда должны заключать имена ключей массива в кавычки)
  3. Внутри открытого тега сценария используйте <?php для создания блока кода PHP и создания вашегоforeach петля.Для каждого элемента создайте код JavaScript, необходимый для создания маркера.

Пример цикла foreach:

<script type="text/javascript">
<?php
foreach($map as $row) {
    $lng = $row['lng'];
    $lat = $row['lat'];
    ?>
    // Creating a marker and positioning it on the map  
    new google.maps.Marker({  
        position: new google.maps.LatLng(<?php echo $lat ?>, <?php echo $lng; ?>),  
        map: map  
    }); 
    <?php
}
?>
</script>
0 голосов
/ 11 мая 2011
example to loop in JavaScript is as follows-

<script type="text/javascript">
"<?php echo $arr=array('1'=>'1','2'=>'2','3'=>'3','4'=>'4','5'=>'5'); 
foreach($arr as $k => $v){ ?>"
var x='<?php echo $v; ?>';
alert(x);
"<?php } ?>"
</script> 

Replace $arr with your array and apply google map code in the script.
0 голосов
/ 11 мая 2011

Как сказал @nrabinowitz, вы можете добавить код в запрос ajax

Если ваш javascript находится на той же самой загружаемой странице, вы можете добавить его на той же странице.

<?php $c = 0;// counter ?>
<?php foreach ($map as $row):?>
var marker<?php echo $c?> = new google.maps.Marker({
     position: new google.maps.LatLng(<?php echo $row['lat'].','.$row['long']; ?>),     map: map   });
<?php $c++; ?>
<?php endforeach;?>

Таким образом, вы не будете перезаписывать переменную

0 голосов
/ 11 мая 2011

Вы хотите зациклить это:

var marker;

<?php foreach($map as $row){ ?>
  marker = new google.maps.Marker({  
  position: new google.maps.LatLng(<?php echo $row['lat'].','.$row['long']; ?>),  
  map: map  
});
<?php } ?>

Сразу после включения другого кода (который изначально предназначен для настройки карты).

0 голосов
/ 11 мая 2011

Обычно подход заключается в том, чтобы кодировать данные PHP как JSON, а затем выводить их в переменную Javascript:

<script type="text/javascript">
var myData = <?php echo json_encode($map); ?>;
</script>

, который выведет Javascript-литерал, который вы можете использовать в своих скриптах на стороне клиента.

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