将PHP集成到Javascript中,使用Google API显示地图标记
Integrating PHP into Javascript to display map markers with Google API
我要显示一个地图标记,但不能显示多个标记。
但是,数据显示在HTML日志中。我认为我错过了一个循环或没有正确使用当前循环。
任何能澄清的人都会让我高兴。
谢谢。
以下是代码:
<?php get_header(); ?>
<!-- Row for main content area -->
<div class="small-12 large-12 columns" id="content" role="main">
<h1 class="entry-title">Find a store</h1>
<script type="text/javascript">
var map;
function initMap() {
map = new google.maps.Map(document.getElementById('map'), {
center: {lat: -28.5758488, lng: 25.1128267},
zoom: 5
});
setMarkers(map);
}
;
</script>
<div id="map"></div>
<?php
$args = array('post_type' => 'store', array("output" => "raw"), 'posts_per_page' => 50,);
$loop = new WP_Query($args);
while ($loop->have_posts()) : $loop->the_post();
?>
<?php $lat = types_render_field("lat", array("output" => "raw")); ?>
<?php $long = types_render_field("long", array("output" => "raw")); ?>
<script type="text/javascript">
var lat = <?php echo $lat; ?>;
var long = <?php echo $long; ?>;
var locations = [
['<?php the_title(); ?>', lat, long]
];
function setMarkers(map) {
for (var i = 0; i < locations.length; i++) {
var location = locations[i];
var marker = new google.maps.Marker({
position: {lat: location[1], lng: location[2]},
map: map,
title: location[0],
});
}
}
</script>
<?php endwhile; // End the loop ?>
<script src="https://maps.googleapis.com/maps/api/..." async defer></script>
</div>
<?php get_footer(); ?>
这是控制台日志中的输出脚本:
<script type="text/javascript">
var map;
function initMap() {
map = new google.maps.Map(document.getElementById('map'), {
center: {lat: -28.5758488, lng: 25.1128267},
zoom: 5
});
setMarkers(map);
}
;
</script>
<div id="map"></div>
<script type="text/javascript">
function setMarkers(map) {
var marker = new google.maps.Marker({
position: new google.maps.LatLng({lat: -25.746111, lng: 28.188056}),
map: map,
title: 'Willow Way Spar'
});
}
</script>
<script type="text/javascript">
function setMarkers(map) {
var marker = new google.maps.Marker({
position: new google.maps.LatLng({lat: -29.919885, lng: 30.941782}),
map: map,
title: 'Yellowwood park Superspar'
});
}
</script>
<script type="text/javascript">
function setMarkers(map) {
var marker = new google.maps.Marker({
position: new google.maps.LatLng({lat: -26.8598225, lng: 26.6317514}),
map: map,
title: 'Zest for Health'
});
}
</script>
<script type="text/javascript">
function setMarkers(map) {
var marker = new google.maps.Marker({
position: new google.maps.LatLng({lat: -25.8299422, lng: 28.2819103}),
map: map,
title: 'Zest Wellness Centre'
});
}
</script>
<script src="https://maps.googleapis.com/maps/api/..." async defer></script>
</div>
我用这个代码得到了相同的结果:
<?php get_header(); ?>
<!-- Row for main content area -->
<div class="small-12 large-12 columns" id="content" role="main">
<h1 class="entry-title">Find a store</h1>
<script type="text/javascript">
var map;
function initMap() {
map = new google.maps.Map(document.getElementById('map'), {
center: {lat: -28.5758488, lng: 25.1128267},
zoom: 5
});
setMarkers(map);
}
;
</script>
<div id="map"></div>
<?php
$args = array('post_type' => 'store', array("output" => "raw"), 'posts_per_page' => 50,);
$loop = new WP_Query($args);
while ($loop->have_posts()) : $loop->the_post();
?>
<?php $lat = types_render_field("lat", array("output" => "raw")); ?>
<?php $long = types_render_field("long", array("output" => "raw")); ?>
<script type="text/javascript">
var lat = <?php echo $lat; ?>;
var long = <?php echo $long; ?>;
</script>
<script>
function setMarkers(map) {
var marker = new google.maps.Marker({
position: {lat: lat, lng: long},
map: map,
title: '<?php the_title(); ?>',
});
}
</script>
<?php wp_reset_postdata(); ?>
<?php endwhile; // End the loop ?>
<script src="https://maps.googleapis.com/maps/api/..." async defer></script>
</div>
<?php get_footer(); ?>
这里有一个测试页面的链接:
http://www.golonutrition.co.za/find-a-store/
您正在一次又一次地初始化while循环中的整个map对象。你想把它从循环中去掉,只在循环中设置标记。
为了避免这种问题,我认为最好通过ajax Requette恢复结果,并直接使用lat和long变量javascript
<?php
$storeData = [];
$args = ['post_type' => 'store'];
$loop = new WP_Query($args);
foreach ($loop->posts as $post) {
$storeData[] = [
'title' => apply_filters('the_title', $post->post_title),
'lat' => types_render_field('lat', ['output' => 'raw']),
'long' => types_render_field('long', ['output' => 'raw']),
];
}
wp_localize_script('jquery-core', 'storeData', $storeData);?>
<?php get_header(); ?>
<!-- Row for main content area -->
<div class="small-12 large-12 columns" id="content" role="main">
<h1 class="entry-title">Find a store</h1>
<div id="map"></div>
<script src="https://maps.googleapis.com/maps/api/..." async defer></script>
<script type="text/javascript">
function initMap() {
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 5,
center: new google.maps.LatLng(-27.2758488, 26.1128267),
mapTypeId: google.maps.MapTypeId.ROADMAP
});
var infowindow = new google.maps.InfoWindow();
var marker, i;
var j = storeData.length;
for (i = 0; i < j; i++) {
marker = new google.maps.Marker({
position: new google.maps.LatLng(storeData[i].lat, storeData[i].long),
map: map
});
google.maps.event.addListener(marker, 'click', (function(marker, i) {
return function() {
infowindow.setContent(storeData[i].title);
infowindow.open(map, marker);
}
})(marker, i));
}
};
</script>
相关文章:
- 是否可以控制获取哪些Google地图脚本(JavaScript API)
- 单击超链接时,如何使用Google Maps API v3缩放地图
- 使用Google Maps API向标记添加多个字符
- 回调函数中传递参数的困难(Google Map API Markers)
- 在Chrome扩展内部输出Google API调用
- 如何使用Google Sheets API+Javascript阅读电子表格
- 使用API在我的网站Google-Map上显示搜索地址的纬度和经度
- Google Maps API OverlayView()在AngularJS指令中不起作用
- 使用Google Maps API驱动时间多边形
- 使用Google Maps JavaScript API v3和Geocoding API映射多个位置
- 使用Google'设置ID属性;s映射API
- Google Data API上的OOP Javascript回调方法
- JavaScript回调函数和Google Feed API
- API Google Maps Javascript在上下文菜单中调用事件侦听器
- API Google将Javascript地址映射到LatLng
- REST API Google Sheets -从客户端JS使用
- Wordpress子主题Google地图API Google places
- 哪个(如果有的话)Javascript存储API (Google Drive, Dropbox, OneDrive)提供
- Firebase ID令牌用于保护API (Google Cloud endpoint)
- 如何处理对google API google.maps.DanceMatrixService.getDistanceMa