2013-07-23 2 views
0

tutorial을 사용하여 Wordpress 사용자 정의 게시 유형 메타 데이터 상자에서 XML 파일로 데이터를 가져온 다음 데이터베이스에서 마커 설정을 사용하여 Google지도를 만듭니다. 값. 데이터베이스 값에서 Google지도를 추가 할 때 GET 오류가 발생합니다.

나는 폴더를 추가하고 파일 generateMapXml.php

지도/generateMapXml.php라는 테마 디렉토리

<?php 

// Create a xml doc for map 
// Start XML file, create parent node 
$dom = new DOMDocument("1.0"); 
$node = $dom->createElement("markers"); 
$parnode = $dom->appendChild($node); 

header("Content-type: text/xml"); 


//Query the artist for info & coordinates. 
$args = array(
'post_type' => 'artists', 
'posts_per_page' => -1 
); 
$query = new WP_Query($args); 
if($query->have_posts()): ?> 
<?php while($query->have_posts()): ?> 
    <?php $query->the_post() ?> 
    <?php 
     $mapName = get_the_title(); 
     $mapAddress = rwmb_meta('artists_location'); 
     $mapLat  = rwmb_meta('artists_lat'); 
     $mapLong = rwmb_meta('artists_long'); 
     $mapType = rwmb_meta('artists_type'); 

     $node = $dom->createElement("marker"); 
     $newnode = $parnode->appendChild($node); 
     $newnode->setAttribute("name",$mapName); 
     $newnode->setAttribute("address",$mapAddress); 
     $newnode->setAttribute("lat",$mapLat); 
     $newnode->setAttribute("lng",$mapLong); 
     $newnode->setAttribute("type",$mapType); 
    ?> 
<?php endwhile ?> 
<?php endif ?> 

<?php echo $dom->saveXML(); ?> 

지금까지 너무 좋아. 이 출력됩니다 적절한 XML,하지만 난 튜토리얼 지침에 따라 JQuery와에 파일 내용을 당겨하려고하면

downloadUrl("<?php echo get_template_directory_uri(); ?>/map/generateMapXml.php", 
function(data) { 
       var xml = data.responseXML; 
       var markers = xml.documentElement.getElementsByTagName("marker"); 
       for (var i = 0; i < markers.length; i++) { 
        var name = markers[i].getAttribute("name"); 
        var address = markers[i].getAttribute("address"); 
        var type = markers[i].getAttribute("type"); 
        var point = new google.maps.LatLng(
         parseFloat(markers[i].getAttribute("lat")), 
         parseFloat(markers[i].getAttribute("lng"))); 
        var html = "<b>" + name + "</b> <br/>" + address; 
        var icon = customIcons[type] || {}; 
        var marker = new google.maps.Marker({ 
        map: map, 
        position: point, 
        icon: icon.icon, 
        shadow: icon.shadow 
        }); 
        bindInfoWindow(marker, map, infoWindow, html); 
       } 
       }); 
      } 
function downloadUrl(url, callback) { 
      var request = window.ActiveXObject ? 
       new ActiveXObject('Microsoft.XMLHTTP') : 
       new XMLHttpRequest; 

      request.onreadystatechange = function() { 
      if (request.readyState == 4) { 
       request.onreadystatechange = doNothing; 
       callback(request, request.status); 
      } 
      }; 

      request.open('GET', url, true); 
      request.send(null); 
     } 

나는 500 내부 서버 오류를 얻을 :

GET http://localhost/test/number/wp-content/themes/testtheme/map/generateMapXml.php 500 (Internal Server Error) localhost/test/number/:93 
downloadUrl localhost/test/number/:93 
load localhost/test/number/:49 
onload 

그것은 마치입니다 파일이 없습니다. 폴더와 파일의 chmod 설정이 777입니다. Wordpress 또는 내 코드의 구문 오류로 인해이 오류가 발생합니까? 지도를 만드는 더 쉬운 방법이 있습니까?

+0

아니요, 파일이 없으면 404 오류가 발생합니다. 500 오류는 코딩 문제를 나타낼 수 있습니다 (서버 구성에 따라 다름). 온전한 검사 : php 파일의 맨 위에 "die ("test ")"를 추가하십시오. 실제로 파일을 실행하고 있는지 여부를 표시합니다. – phil

답변

0

다른 경로를 사용했습니다. 이것은 잘 작동합니다.

<?php 
wp_reset_postdata(); 
$args = array(
    'post_type' => 'artists', 
    'posts_per_page' => -1 
); 
$query = new WP_Query($args); 
?> 
<script> 
    var infowindow; 
    var gmarkers = []; 
    var side_bar_html = ""; 
    (function() { 

     google.maps.Map.prototype.markers = new Array(); 

     google.maps.Map.prototype.addMarker = function(marker) { 
     this.markers[this.markers.length] = marker; 
     }; 

     google.maps.Map.prototype.getMarkers = function() { 
     return this.markers 
     }; 

     google.maps.Map.prototype.clearMarkers = function() { 
     if(infowindow) { 
      infowindow.close(); 
     } 

     for(var i=0; i<this.markers.length; i++){ 
      this.markers[i].set_map(null); 
     } 
     }; 
    })(); 

function mapLoad() { 
    var latlng = new google.maps.LatLng(40.734673, -73.990602); 
    var myOptions = { 
     zoom: 15, 
     center: latlng, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
     //mapTypeId: google.maps.MapTypeId.SATELLITE 
    }; 
    map = new google.maps.Map(document.getElementById("map"), myOptions); 
    var a = new Array(); 
      <?php if($query->have_posts()): ?> 
       <?php $arrayCount = 0 ?> 
       <?php while($query->have_posts()): ?> 
        <?php $query->the_post() ?> 
        <?php 
         $mapName = ""; 
         $mapNames = rwmb_meta('aiop_artists_name'); 
         $nameCount = count($mapNames); 
         $i = 1; 
         foreach($mapNames as $name) { 
          if(strpos($name,',') !== false) { 
           $fullName = explode(",", $name); 
           if($nameCount > 1) { 
            $mapName .= $fullName[1]." ".$fullName[0]; 
            if($i != $nameCount) { 
             $mapName .= ", "; 
            } 
           } else { 
            $mapName .= $fullName[1]." ".$fullName[0]; 
           } 
          } else { 
           $mapName = $name; 
          } 
          $i++; 
         } 
         $mapImage = get_the_post_thumbnail(get_the_ID(), 'thumbnail', array('class' => 'mapImage')); 
         $mapTitle = rwmb_meta('aiop_artists_project_title'); 
         $mapAddress = rwmb_meta('aiop_artists_location'); 
         $mapLat  = rwmb_meta('aiop_artists_lat'); 
         $mapLong = rwmb_meta('aiop_artists_long'); 
         $mapType = rwmb_meta('aiop_artists_type'); 

         $mapTitle = str_replace("'", '&#39;', $mapTitle); 
         $mapTitle = str_replace('"', '&#34;', $mapTitle); 

         if($mapLat != NULL && $mapLat != "" && $mapLong != NULL && $mapLong != ""): ?> 
          <?php echo " 
           var t = new Object(); 
           t.name = '".$mapName."'; 
           t.lat = ".$mapLat."; 
           t.lng = ".$mapLong."; 
           mapImage = '".$mapImage."'; 
           mapTitle = '".$mapTitle."'; 
           t.info = mapImage+'<p class=map_artistName>'+t.name+'</p><p class=map_artistTitle>'+mapTitle+'</p>'; 
           a[".$arrayCount."] = t;"; ?> 
           <?php $arrayCount++ ?> 
         <?php endif ?> 
       <?php endwhile ?> 
      <?php endif ?> 
    for (var i = 0; i < a.length; i++) { 
     var latlng = new google.maps.LatLng(a[i].lat, a[i].lng); 
     map.addMarker(createMarker(a[i].info,latlng)); 
    } 
} 

function createMarker(name, latlng) { 
    var marker = new google.maps.Marker({ 
      position: latlng, 
      map: map, 
     }); 
    google.maps.event.addListener(marker, "click", function() { 
     if (infowindow) infowindow.close(); 
     infowindow = new google.maps.InfoWindow({content: name}); 
     infowindow.open(map, marker); 
    }); 
    // save the info we need to use later for the side_bar 
    gmarkers.push(marker); 
    // add a line to the side_bar html 
    side_bar_html += '<a href="javascript:myclick(' + (gmarkers.length-1) + ')">' + name + '<\/a><br>'; 
    return marker; 
} 

// This function picks up the click and opens the corresponding info window 
function myclick(i) { 
    google.maps.event.trigger(gmarkers[i], "click"); 
} 
</script> 
관련 문제