Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Hello evryone, i'm developping my first zf2 application but i have a problem with the javascript function. I want to display on my map the points of my events using latitude and longitude. However, when i try with a static points all works fine, but when i put some variables from database, no results in my map.
This is my code :
function geolocationSuccess() { <?php foreach ($eventss as $even) : ?> // alert(<?php echo ($even->latitude); ?>); //alert(<?php echo ($even->longitude); ?>); var locations = [ ['Bondi Beach', <?php echo ($even->latitude); ?>,<?php echo ($even->longitude); ?>], ['Maroubra Beach', 43.5528470, 7.0173690], ['Allmagne', 51.16569, 10.45153], ['Marroc', 31.79170, -7.09262] ]; var map = new google.maps.Map(document.getElementById('map'), { zoom: 5, center: new google.maps.LatLng(46.22, 2.36), mapTypeId: google.maps.MapTypeId.ROADMAP }); <?php endforeach; ?> var infowindow = new google.maps.InfoWindow(); var marker, i; for (i = 0; i < locations.length; i++) { marker = new google.maps.Marker({ position: new google.maps.LatLng(locations[i][1], locations[i][2]), map: map }); google.maps.event.addListener(marker, 'click', (function (marker, i) { return function () { infowindow.setContent(locations[i][0]); infowindow.open(map, marker); } })(marker, i)); } }
Any help please Thanks.
Hors ligne
Hey simsam!
i see only js here
Is your array eventss as you expects? (if yes we can't help you, it's a ZF forum and not js )
If not, give us the way you get $eventss too let us help you.
Dernière modification par flobrflo (01-04-2015 11:56:42)
Hors ligne
No it's a phtml file and this is the hole script :
<body> <div class = "map" id= "map" style= "overflow:hidden;" > </div> </body> <script> function writeAddressName(latLng) { var geocoder = new google.maps.Geocoder(); geocoder.geocode({ "location" : latLng }, function (results, status) { if (status == google.maps.GeocoderStatus.OK) document.getElementById( "address" ).innerHTML = results[0].formatted_address; else document.getElementById( "error" ).innerHTML += "Unable to retrieve your address" + "<br />" ; }); } function geolocationSuccess() { <?php foreach ( $eventss as $even ) : ?> // alert(<?php echo ($even->latitude); ?>); //alert(<?php echo ($even->longitude); ?>); var locations = [ [ 'Bondi Beach' , <?php echo ( $even ->latitude); ?>,<?php echo ( $even ->longitude); ?>], [ 'Maroubra Beach' , 43.5528470, 7.0173690], [ 'Tunis, Tunisia' , 33.88692, 9.53750], ]; var map = new google.maps.Map(document.getElementById( 'map' ), { zoom: 5, center: new google.maps.LatLng(46.22, 2.36), mapTypeId: google.maps.MapTypeId.ROADMAP }); <?php endforeach ; ?> var infowindow = new google.maps.InfoWindow(); var marker, i; for (i = 0; i < locations.length; i++) { marker = new google.maps.Marker({ position: new google.maps.LatLng(locations[i][1], locations[i][2]), map: map }); google.maps.event.addListener(marker, 'click' , ( function (marker, i) { return function () { infowindow.setContent(locations[i][0]); infowindow.open(map, marker); } })(marker, i)); } } function geolocationError(positionError) { document.getElementById( "error" ).innerHTML += "Error: " + positionError.message + "<br />" ; } function geolocateUser() { // If the browser supports the Geolocation API if (navigator.geolocation) { var positionOptions = { enableHighAccuracy: true, timeout: 10 * 1000 // 10 seconds }; navigator.geolocation.getCurrentPosition(geolocationSuccess, geolocationError, positionOptions); // navigator.geolocation.getCurrentPosition(geolocationSuccess1, geolocationError, positionOptions); } else document.getElementById( "error" ).innerHTML += "Your browser doesn't support the Geolocation API" ; } window.onload = geolocateUser; </script> |
and here is the actionController :
public function calendarAction() { $language = $this ->params()->fromRoute( 'lang' , 'en_US' ); $language = explode ( '_' , $language ); $lang = $language [0]; $this ->layout()->setVariable( 'lang' , $this ->params()->fromRoute( 'lang' , 'en_US' )); $this ->layout()->setVariable( 'action' , $this ->params()->fromRoute( 'action' , 'index' )); $this ->layout()->setVariable( 'id' , $this ->params()->fromRoute( 'id' , '' )); $Events = array (); $Eventss = array (); //$taches=array(); $events = $this ->getEventTable()->fetchAll(null); foreach ( $events as $a ) { $Events [] = $a ; } $eventss = $this ->getEventTable()->fetchAll(); foreach ( $eventss as $l ) { $Eventss [] = $l ; } return ( array ( 'events' => $Events , 'eventss' => $Eventss , )); } |
Dernière modification par simsam (02-04-2015 14:04:41)
Hors ligne
In your code you get :
var locations = [...]
so you reset all the times the value, i think you want to push every time, so something like that:
<?php foreach ( $eventss as $even ){ ?> location.push([ 'Bondi Beach' , <?php echo ( $even ->latitude); ?>,<?php echo ( $even ->longitude); ?>]) <?php } ?> |
Hors ligne
I tried with these and i searched what exatly the problem. But each time with the locations.push, only 5 points diplay on my map. however, i have 13 points on my database.
Hors ligne
You get 13 elem on eventss?
Hors ligne
Hello, yes when i put the alert the display the points whitch i have in my database i have 13 alerts for points, but only 5 points are in my map. i don't know what's the problem!
Hors ligne
Ok, so their are only few ways :
1) $even ->latitude || $even ->longitude //aren't float 2) $even ->latitude || $even ->longitude //wron place : too far or same position 3) error js wich broke your loop |
if not, can't help you more xD
Hors ligne