테스트 사이트 - 개발 중인 베타 버전입니다

펄스나인님 다중마커 지도 스킨 질문입니다.

kpilot 5개월 전 조회 1,510

그누보드 스킨으로 적용해서

약간 커스텀하여 사용중입니다.

 

위치보기 클릭 시에는 panTo 정상적으로 마커 위치로 이동되는데, 지도 위에 마커를 클릭 시 아무 반응이 없습니다. 커서도 grabCursor 그대로구요..

 

list.skin.php 에 무슨 문제가 있나요? ㅠㅠ

 

</p>

<p><?php</p>

<p>if (!defined('_GNUBOARD_')) exit;</p>

<p>include_once(G5_LIB_PATH.'/thumbnail.lib.php');</p>

<p> </p>

<p>function get_board_sfl_select_options2($sfl){</p>

<p>    global $is_admin;</p>

<p>    $str = '';</p>

<p> </p>

<p>    $str .= '<option value="wr_subject||wr_3||wr_4" '.get_selected($sfl, 'wr_subject||wr_3||wr_4').'>업체명+주소</option>';</p>

<p>    $str .= '<option value="wr_subject" '.get_selected($sfl, 'wr_subject', true).'>업체명</option>';</p>

<p>    $str .= '<option value="wr_3||wr_4" '.get_selected($sfl, 'wr_3||wr_4').'>주소</option>';</p>

<p>    $str .= '<option value="wr_2" '.get_selected($sfl, 'wr_2', true).'>대표전화</option>';</p>

<p>   </p>

<p>    return run_replace('get_board_sfl_select_options2', $str, $sfl);</p>

<p>}</p>

<p> </p>

<p>$colspan = 5;</p>

<p> </p>

<p>if ($is_checkbox) $colspan++;</p>

<p>if ($is_good) $colspan++;</p>

<p>if ($is_nogood) $colspan++;</p>

<p> </p>

<p>add_stylesheet('<link rel="stylesheet" href="'.$board_skin_url.'/style.css">', 0);</p>

<p>

 </p>

<p>$lat = 36.556400714093284; // 초기 및 리셋 중심좌표</p>

<p>$lng = 126.9785391897507; // 초기 및 리셋 중심좌표</p>

<p>?></p>

<p>





 </p>

<p><!-- 게시판 목록 시작 { --></p>

<p><div id="bo_list"></p>

<p> </p>

<p>    <div id="map" data-aos="fade-up" data-aos-delay="0" data-aos-offset="0"></div></p>

<p> </p>

<p>    <script type="text/javascript" src="//dapi.kakao.com/v2/maps/sdk.js?appkey=<?php echo $board['bo_1'] ?>&libraries=services"></script></p>

<p>    <!-- } --></p>

<p> </p>

<p>    <script></p>

<p>        var mapContainer = document.getElementById('map'), // 지도를 표시할 div</p>

<p>        mapOption = {</p>

<p>            center: new kakao.maps.LatLng(<?php echo $lat ?: '36.556400'; ?>, <?php echo $lng ?: '126.978539'; ?>), // 지도의 중심좌표 (기본값 추가)</p>

<p>            level: 13 // 지도 초기 확대레벨</p>

<p>        };</p>

<p> </p>

<p>    var map = new kakao.maps.Map(mapContainer, mapOption);</p>

<p> </p>

<p>    <?php</p>

<p>    $gu = htmlspecialchars(str_replace("/", "", $_GET['gubun']), ENT_QUOTES, 'UTF-8'); // XSS 방지</p>

<p> </p>

<p>    if ($_GET['gubun'] == "") {</p>

<p>        $sql = "SELECT * FROM g5_write_" . $bo_table . " ORDER BY wr_id ASC";</p>

<p>    } else {</p>

<p>        $sql = "SELECT * FROM g5_write_" . $bo_table . " WHERE ca_name='" . $gu . "' ORDER BY wr_id ASC";</p>

<p>    }</p>

<p> </p>

<p>    $result = sql_query($sql);</p>

<p>    $cnt = 0;</p>

<p>    while ($row = sql_fetch_array($result)) {</p>

<p>        if ($row['wr_5'] && $row['wr_6']) {</p>

<p>            $thumb = get_list_thumbnail($board['bo_table'], $row['wr_id'], $board['bo_gallery_width'], $board['bo_gallery_height'], false, true);</p>

<p>            $img_content = $thumb['src'] ?: '';</p>

<p>    ?></p>

<p>        // 마커 이미지 설정</p>

<p>        <?php if ($row['wr_1'] == "markerStar1") { ?></p>

<p>        var imageSrc = '<?php echo $board_skin_url ?>/img/markerStar1.png';</p>

<p>        <?php } else if ($row['wr_1'] == "markerStar2") { ?></p>

<p>        var imageSrc = '<?php echo $board_skin_url ?>/img/markerStar2.png';</p>

<p>        <?php } else if ($row['wr_1'] == "markerStar3") { ?></p>

<p>        var imageSrc = '<?php echo $board_skin_url ?>/img/markerStar3.png';</p>

<p>        <?php } else if ($row['wr_1'] == "markerStar4") { ?></p>

<p>        var imageSrc = '<?php echo $board_skin_url ?>/img/markerStar4.png';</p>

<p>        <?php } else if ($row['wr_1'] == "markerStar5") { ?></p>

<p>        var imageSrc = '<?php echo $board_skin_url ?>/img/markerStar5.png';</p>

<p>        <?php } else { ?></p>

<p>        var imageSrc = '<?php echo $board_skin_url ?>/img/markerStar6.png';</p>

<p>        <?php } ?></p>

<p> </p>

<p>        var imageSize = new kakao.maps.Size(24, 35), // 마커이미지의 크기</p>

<p>            imageOption = { offset: new kakao.maps.Point(12, 35) }; // 마커이미지의 옵션</p>

<p> </p>

<p>        // 마커의 이미지정보를 가지고 있는 마커이미지 생성</p>

<p>        var markerImage = new kakao.maps.MarkerImage(imageSrc, imageSize, imageOption),</p>

<p>            markerPosition = new kakao.maps.LatLng(<?php echo $row['wr_5'] ?>, <?php echo $row['wr_6'] ?>); // 마커가 표시될 위치</p>

<p> </p>

<p>        // 마커 생성</p>

<p>        var marker = new kakao.maps.Marker({</p>

<p>            position: markerPosition,</p>

<p>            image: markerImage,</p>

<p>            clickable: true</p>

<p>        });</p>

<p> </p>

<p>        // 마커가 지도 위에 표시되도록 설정</p>

<p>        marker.setMap(map);</p>

<p> </p>

<p>        // 커스텀 오버레이에 표시할 컨텐츠</p>

<p>        var content = `</p>

<p>            <div class="wrap"></p>

<p>                <div class="info"></p>

<p>                    <div class="body"></p>

<p>                        <div class="desc" style="margin-left:10px;"></p>

<p>                            <img src="<?php echo $board_skin_url ?>/img/close_black_24dp.svg" class="close" onclick="closeOverlay_<?php echo $row['wr_id'] ?>()" title="닫기"></p>

<p>                            <div class="titles cut80"><a href="<?php echo G5_BBS_URL ?>/board.php?bo_table=<?php echo $bo_table ?>&wr_id=<?php echo $row['wr_id']; ?>"><?php echo $row['wr_subject']; ?></a></div></p>

<p>                            <div class="sub1 cut90"><?php echo $row['wr_3']; ?> <?php echo $row['wr_4']; ?></div></p>

<p>                            <?php if ($row['wr_2']) { ?></p>

<p>                            <div class="sub3 cut90"><a href="tel:<?php echo $row['wr_2']; ?>"><?php echo $row['wr_2']; ?></a></div></p>

<p>                            <?php } else { ?></p>

<p>                            <div class="sub2 cut90"><a href="<?php echo $row['wr_link1']; ?>" target="_blank"><?php echo $row['wr_link1']; ?></a></div></p>

<p>                            <?php } ?></p>

<p>                        </div></p>

<p>                    </div></p>

<p>                </div></p>

<p>            </div>`;</p>

<p> </p>

<p>        // 커스텀 오버레이 생성</p>

<p>        var overlay_<?php echo $row['wr_id'] ?> = new kakao.maps.CustomOverlay({</p>

<p>            content: content,</p>

<p>            map: null,</p>

<p>            position: new kakao.maps.LatLng(<?php echo $row['wr_5'] ?>, <?php echo $row['wr_6'] ?>),</p>

<p>            yAnchor: 1</p>

<p>        });</p>

<p> </p>

<p>        // 마커 클릭 시 오버레이 표시</p>

<p>        kakao.maps.event.addListener(marker, 'click', function() {</p>

<p>            overlay_<?php echo $row['wr_id'] ?>.setMap(map);</p>

<p>        });</p>

<p> </p>

<p>        // 오버레이 닫기 함수</p>

<p>        window.closeOverlay_<?php echo $row['wr_id'] ?> = function() {</p>

<p>            overlay_<?php echo $row['wr_id'] ?>.setMap(null);</p>

<p>        };</p>

<p> </p>

<p>        overlay_<?php echo $row['wr_id'] ?>.setMap(null);</p>

<p> </p>

<p>    <?php</p>

<p>            $cnt++;</p>

<p>        }</p>

<p>    } ?></p>

<p>    </script></p>

<p>

댓글을 작성하려면 로그인이 필요합니다.

답변 3개

5개월 전

어차피 그 코드로는 알수있는 정보가 없습니다.

적어도 핸들러 이벤트 정도는 알아야 뭔가 답변드릴텐데

 

feat. 그놈의 GPT...

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

5개월 전

PHP while 반복문에서 동적으로 생성되는 다수의 전역 함수와 변수들로 인한 스코프 관리 문제나

JavaScript 실행 오류가 발생해서 마커 클릭 이벤트가 제대로 작동하지 않았을 가능성이 있습니다.

 

</p>

<p><?php

if (!defined('_GNUBOARD_')) exit;

include_once(G5_LIB_PATH.'/thumbnail.lib.php');

 

function get_board_sfl_select_options2($sfl){

    global $is_admin;

    $str = '';

 

    $str .= '<option value="wr_subject||wr_3||wr_4" '.get_selected($sfl, 'wr_subject||wr_3||wr_4').'>업체명+주소</option>';

    $str .= '<option value="wr_subject" '.get_selected($sfl, 'wr_subject', true).'>업체명</option>';

    $str .= '<option value="wr_3||wr_4" '.get_selected($sfl, 'wr_3||wr_4').'>주소</option>';

    $str .= '<option value="wr_2" '.get_selected($sfl, 'wr_2', true).'>대표전화</option>';

   

    return run_replace('get_board_sfl_select_options2', $str, $sfl);

}

 

$colspan = 5;

 

if ($is_checkbox) $colspan++;

if ($is_good) $colspan++;

if ($is_nogood) $colspan++;

 

add_stylesheet('<link rel="stylesheet" href="'.$board_skin_url.'/style.css">', 0);</p>

<p> 

$lat = 36.556400714093284; // 초기 및 리셋 중심좌표

$lng = 126.9785391897507; // 초기 및 리셋 중심좌표

?></p>

<p> 

<!-- 게시판 목록 시작 { -->

<div id="bo_list">

 

    <div id="map" data-aos="fade-up" data-aos-delay="0" data-aos-offset="0"></div>

 

    <script type="text/javascript" src="//dapi.kakao.com/v2/maps/sdk.js?appkey=<?php echo $board['bo_1'] ?>&libraries=services"></script>

    <!-- } -->

 

    <script>

        var mapContainer = document.getElementById('map'), // 지도를 표시할 div

        mapOption = {

            center: new kakao.maps.LatLng(<?php echo $lat ?: '36.556400'; ?>, <?php echo $lng ?: '126.978539'; ?>), // 지도의 중심좌표 (기본값 추가)

            level: 13 // 지도 초기 확대레벨

        };

 

        var map = new kakao.maps.Map(mapContainer, mapOption);

        

        // 마커와 오버레이를 저장할 배열

        var markers = [];

        var overlays = [];</p>

<p>        <?php

        $gu = htmlspecialchars(str_replace("/", "", $_GET['gubun']), ENT_QUOTES, 'UTF-8'); // XSS 방지

     

        if ($_GET['gubun'] == "") {

            $sql = "SELECT * FROM g5_write_" . $bo_table . " ORDER BY wr_id ASC";

        } else {

            $sql = "SELECT * FROM g5_write_" . $bo_table . " WHERE ca_name='" . $gu . "' ORDER BY wr_id ASC";

        }

     

        $result = sql_query($sql);

        $cnt = 0;

        $marker_data = array(); // 마커 데이터를 저장할 배열

        

        while ($row = sql_fetch_array($result)) {

            if ($row['wr_5'] && $row['wr_6']) {

                $thumb = get_list_thumbnail($board['bo_table'], $row['wr_id'], $board['bo_gallery_width'], $board['bo_gallery_height'], false, true);

                $img_content = $thumb['src'] ?: '';

                

                // 마커 이미지 결정

                $marker_img = 'markerStar6.png'; // 기본값

                if (in_array($row['wr_1'], ['markerStar1', 'markerStar2', 'markerStar3', 'markerStar4', 'markerStar5'])) {

                    $marker_img = $row['wr_1'] . '.png';

                }

                

                // 마커 데이터 배열에 추가

                $marker_data[] = array(

                    'id' => $row['wr_id'],

                    'lat' => $row['wr_5'],

                    'lng' => $row['wr_6'],

                    'image' => $marker_img,

                    'subject' => addslashes($row['wr_subject']),

                    'addr1' => addslashes($row['wr_3']),

                    'addr2' => addslashes($row['wr_4']),

                    'phone' => addslashes($row['wr_2']),

                    'link' => addslashes($row['wr_link1'])

                );

                $cnt++;

            }

        }

        ?>

        

        // 마커 데이터를 JavaScript로 전달

        var markerData = <?php echo json_encode($marker_data, JSON_UNESCAPED_UNICODE); ?>;

        

        // 오버레이 닫기 함수

        function closeOverlay(index) {

            if (overlays[index]) {

                overlays[index].setMap(null);

            }

        }

        

        // 마커 클릭 핸들러 함수

        function createMarkerClickHandler(markerIndex) {

            return function() {

                // 다른 오버레이들 닫기

                overlays.forEach(function(ov) {

                    ov.setMap(null);

                });

                // 현재 오버레이 표시

                overlays[markerIndex].setMap(map);

            };

        }

        

        // 마커 생성 함수

        function createMarkers() {

            markerData.forEach(function(data, index) {

                // 마커 이미지 설정

                var imageSrc = '<?php echo $board_skin_url ?>/img/' + data.image;

                var imageSize = new kakao.maps.Size(24, 35);

                var imageOption = { offset: new kakao.maps.Point(12, 35) };

                

                // 마커 이미지 생성

                var markerImage = new kakao.maps.MarkerImage(imageSrc, imageSize, imageOption);

                var markerPosition = new kakao.maps.LatLng(data.lat, data.lng);

                

                // 마커 생성

                var marker = new kakao.maps.Marker({

                    position: markerPosition,

                    image: markerImage,

                    clickable: true

                });

                

                // 마커를 지도에 표시

                marker.setMap(map);

                

                // 커스텀 오버레이 컨텐츠 생성

                var content = '<div class="wrap">' +

                    '<div class="info">' +

                        '<div class="body">' +

                            '<div class="desc" style="margin-left:10px;">' +

                                '<img src="<?php echo $board_skin_url ?>/img/close_black_24dp.svg" class="close" onclick="closeOverlay(' + index + ')" title="닫기">' +

                                '<div class="titles cut80"><a href="<?php echo G5_BBS_URL ?>/board.php?bo_table=<?php echo $bo_table ?>&wr_id=' + data.id + '">' + data.subject + '</a></div>' +

                                '<div class="sub1 cut90">' + data.addr1 + ' ' + data.addr2 + '</div>';

                

                if (data.phone) {

                    content += '<div class="sub3 cut90"><a href="tel:' + data.phone + '">' + data.phone + '</a></div>';

                } else if (data.link) {

                    content += '<div class="sub2 cut90"><a href="' + data.link + '" target="_blank">' + data.link + '</a></div>';

                }

                

                content += '</div></div></div></div>';

                

                // 커스텀 오버레이 생성

                var overlay = new kakao.maps.CustomOverlay({

                    content: content,

                    map: null,

                    position: markerPosition,

                    yAnchor: 1

                });

                

                // 배열에 저장

                markers.push(marker);

                overlays.push(overlay);

                

                // 마커 클릭 이벤트 등록

                kakao.maps.event.addListener(marker, 'click', createMarkerClickHandler(index));

            });

        }

        

        // 마커 생성 실행

        createMarkers();

        

    </script>

</div></p>

<p>

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

5개월 전

아래의 코드를 한번 참고를 해보시겠어요

 

 

업체명+주소';     $str .= '';     $str .= '';     $str .= '';         return run_replace('get_board_sfl_select_options2', $str, $sfl); }   $colspan = 5;   if ($is_checkbox) $colspan++; if ($is_good) $colspan++; if ($is_nogood) $colspan++;   add_stylesheet('', 0);

  $lat = 36.556400714093284; // 초기 및 리셋 중심좌표 $lng = 126.9785391897507; // 초기 및 리셋 중심좌표 ?>

 

     
               

 

 

 

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인