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

juso.sir.co.kr 도로명주소를 다음 주소 API 로 변경하는 방법

2014년 10월 31일 부로 SIR 도로명주소 서비스의 지원이 중단 된다고 안내를 드린바 있습니다.
http://sir.co.kr/bbs/board.php?bo_table=co_notice&wr_id=1160

이 게시물을 참고하시어 그누보드 5.0.16 하위 버전의 도로명주소 코드를 수정해 주시기 바랍니다.

config.php


if(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS']=='on') { //https 통신일때 daum 주소 js
define('G5_POSTCODE_JS', '<script src="https://spi.maps.daum.net/imap/map_js_init/postcode.js"></script>');
} else { //http 통신일때 daum 주소 js
define('G5_POSTCODE_JS', '<script src="http://dmaps.daum.net/map_js_init/postcode.js"></script>');
}

위의 내용이 추가되었습니다.



/lib/common.lib.php


function add_javascript($javascript, $order=0)
{
global $html_process;

if(trim($javascript))
$html_process->merge_javascript($javascript, $order);
}

위의 함수 구문이 추가 되었습니다.


class html_process 는 아래와 같이 변경 되었습니다.

class html_process {
protected $css = array();
protected $js = array();

function merge_stylesheet($stylesheet, $order)
{
$links = $this->css;
$is_merge = true;

foreach($links as $link) {
if($link[1] == $stylesheet) {
$is_merge = false;
break;
}
}

if($is_merge)
$this->css[] = array($order, $stylesheet);
}

function merge_javascript($javascript, $order)
{
$scripts = $this->js;
$is_merge = true;

foreach($scripts as $script) {
if($script[1] == $javascript) {
$is_merge = false;
break;
}
}

if($is_merge)
$this->js[] = array($order, $javascript);
}

function run()
{
global $config, $g5, $member;

// 현재접속자 처리
$tmp_sql = " select count(*) as cnt from {$g5['login_table']} where lo_ip = '{$_SERVER['REMOTE_ADDR']}' ";
$tmp_row = sql_fetch($tmp_sql);

if ($tmp_row['cnt']) {
$tmp_sql = " update {$g5['login_table']} set mb_id = '{$member['mb_id']}', lo_datetime = '".G5_TIME_YMDHIS."', lo_location = '{$g5['lo_location']}', lo_url = '{$g5['lo_url']}' where lo_ip = '{$_SERVER['REMOTE_ADDR']}' ";
sql_query($tmp_sql, FALSE);
} else {
$tmp_sql = " insert into {$g5['login_table']} ( lo_ip, mb_id, lo_datetime, lo_location, lo_url ) values ( '{$_SERVER['REMOTE_ADDR']}', '{$member['mb_id']}', '".G5_TIME_YMDHIS."', '{$g5['lo_location']}', '{$g5['lo_url']}' ) ";
sql_query($tmp_sql, FALSE);

// 시간이 지난 접속은 삭제한다
sql_query(" delete from {$g5['login_table']} where lo_datetime < '".date("Y-m-d H:i:s", G5_SERVER_TIME - (60 * $config['cf_login_minutes']))."' ");

// 부담(overhead)이 있다면 테이블 최적화
//$row = sql_fetch(" SHOW TABLE STATUS FROM `$mysql_db` LIKE '$g5['login_table']' ");
//if ($row['Data_free'] > 0) sql_query(" OPTIMIZE TABLE $g5['login_table'] ");
}

$buffer = ob_get_contents();
ob_end_clean();

$stylesheet = '';
$links = $this->css;

if(!empty($links)) {
foreach ($links as $key => $row) {
$order[$key] = $row[0];
$index[$key] = $key;
$style[$key] = $row[1];
}

array_multisort($order, SORT_ASC, $index, SORT_ASC, $links);

foreach($links as $link) {
if(!trim($link[1]))
continue;

$stylesheet .= PHP_EOL.$link[1];
}
}

$javascript = '';
$scripts = $this->js;
$php_eol = '';

unset($order);
unset($index);

if(!empty($scripts)) {
foreach ($scripts as $key => $row) {
$order[$key] = $row[0];
$index[$key] = $key;
$script[$key] = $row[1];
}

array_multisort($order, SORT_ASC, $index, SORT_ASC, $scripts);

foreach($scripts as $js) {
if(!trim($js[1]))
continue;

$javascript .= $php_eol.$js[1];
$php_eol = PHP_EOL;
}
}

/*
</title>
<link rel="stylesheet" href="default.css">
밑으로 스킨의 스타일시트가 위치하도록 하게 한다.
*/
$buffer = preg_replace('#(</title>[^<]*<link[^>]+>)#', "$1$stylesheet", $buffer);

/*
</head>
<body>
전에 스킨의 자바스크립트가 위치하도록 하게 한다.
*/
$buffer = preg_replace('#(</head>[^<]*<body[^>]*>)#', "$javascript\n$1", $buffer);

return $buffer;
}
}




/js/common.js

$(".win_zip_find").click(function() {
win_zip(this.href);
return false;
});

위의 내용이 아래와 같이 변경 되었습니다.

$(".win_zip_find").click(function(e) {
e.preventDefault();
win_zip(this.href);
return false;
});

우편번호 창 win_zip 함수가 아래와 같이 변경 되었습니다.

var win_zip = function(href) {
if(typeof daum === 'undefined'){
alert("다음 juso.js 파일이 로드되지 않았습니다.");
return false;
}

var url_to_array = function(url) {
var request = [];
var pairs = url.substring(url.indexOf('?') + 1).split('&');
for (var i = 0; i < pairs.length; i++) {
var pair = pairs[i].split('=');
request[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);
}
return request;
}

var param = url_to_array(href),
frm_name = param['frm_name'],
frm_addr1 = param['frm_addr1'],
frm_addr2 = param['frm_addr2'],
frm_addr3 = param['frm_addr3'],
frm_zip1 = param['frm_zip1'],
frm_zip2 = param['frm_zip2'],
frm_jibeon = param['frm_jibeon'],
of = document[frm_name];

new daum.Postcode({
oncomplete: function(data) {
// 팝업에서 검색결과 항목을 클릭했을때 실행할 코드를 작성하는 부분.
// 우편번호와 주소 정보를 해당 필드에 넣고, 커서를 상세주소 필드로 이동한다.
of[frm_zip1].value = data.postcode1;
of[frm_zip2].value = data.postcode2;
of[frm_addr1].value = data.address1;
of[frm_addr2].value = "";
of[frm_addr3].value = "";

if( data.addressType == "R" ){ //도로명이면
of[frm_addr3].value = data.address2;
}
if(of[frm_jibeon] !== undefined){
of[frm_jibeon].value = data.addressType;
}

of[frm_addr2].focus();
}
}).open();
}


/bbs/register_form.php

// add_javascript('js 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
if ($config['cf_use_addr'])
add_javascript(G5_POSTCODE_JS, 0); //다음 주소 js


위의 내용이 추가 되었습니다.


/adm/member_form.php

// add_javascript('js 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
add_javascript(G5_POSTCODE_JS, 0); //다음 주소 js

위의 내용이 추가 되었습니다.


<label for="mb_addr2">상세주소</label><br>
<input type="text" name="mb_addr3" value="<?php echo $mb['mb_addr3'] ?>" id="mb_addr3" class="frm_input" size="60">
<label for="mb_addr3">참고항목</label>
<input type="hidden" name="mb_addr_jibeon" value="<?php echo $mb['mb_addr_jibeon']; ?>"><br>
<span id="mb_addr_jibeon">지번주소 : <?php echo $mb['mb_addr_jibeon']; ?></span>

위의 내용이 아래 내용으로 변경되었습니다.

<label for="mb_addr2">상세주소</label>
<br>
<input type="text" name="mb_addr3" value="<?php echo $mb['mb_addr3'] ?>" id="mb_addr3" class="frm_input" size="60">
<label for="mb_addr3">참고항목</label>
<input type="hidden" name="mb_addr_jibeon" value="<?php echo $mb['mb_addr_jibeon']; ?>"><br>


/skin/member/basic/register_form.skin.php

<label for="mb_addr2">상세주소</label><br>
<input type="text" name="mb_addr3" value="<?php echo $mb['mb_addr3'] ?>" id="mb_addr3" class="frm_input" size="60">
<label for="mb_addr3">참고항목</label>
<input type="hidden" name="mb_addr_jibeon" value="<?php echo $mb['mb_addr_jibeon']; ?>"><br>
<span id="mb_addr_jibeon">지번주소 : <?php echo $mb['mb_addr_jibeon']; ?></span>

위의 내용이 아래 내용으로 변경되었습니다.

<input type="text" name="mb_addr2" value="<?php echo $member['mb_addr2'] ?>" id="reg_mb_addr2" class="frm_input frm_address" size="50">
<label for="reg_mb_addr2">상세주소</label>
<br>
<input type="text" name="mb_addr3" value="<?php echo $member['mb_addr3'] ?>" id="reg_mb_addr3" class="frm_input frm_address" size="50" readonly="readonly">
<label for="reg_mb_addr3">참고항목</label>
<input type="hidden" name="mb_addr_jibeon" value="<?php echo $member['mb_addr_jibeon']; ?>">

아래 내용은 삭제 되었습니다.

$("#reg_mb_zip1, #reg_mb_zip2, #reg_mb_addr1").attr("readonly", true);



===== 모바일 ======

/mobile/skin/member/basic/register_form.skin.php

<input type="text" name="mb_addr2" value="<?php echo $member['mb_addr2'] ?>" id="reg_mb_addr2" class="frm_input frm_address" size="50"><br>
<label for="reg_mb_addr3" class="sound_only">참고항목</label>
<input type="text" name="mb_addr3" value="<?php echo $member['mb_addr3'] ?>" id="reg_mb_addr3" readonly="readonly" class="frm_input frm_address" size="50">
<input type="hidden" name="mb_addr_jibeon" value="<?php echo $member['mb_addr_jibeon']; ?>"><br>
<span id="mb_addr_jibeon"><?php echo ($member['mb_addr_jibeon'] ? '지번주소 : '.$member['mb_addr_jibeon'] : ''); ?></span>

위의 내용이 아래 내용으로 변경되었습니다.

<label for="reg_mb_addr2" class="sound_only">상세주소</label>
<input type="text" name="mb_addr2" value="<?php echo $member['mb_addr2'] ?>" id="reg_mb_addr2" class="frm_input frm_address" size="50">
<br>
<label for="reg_mb_addr3" class="sound_only">참고항목</label>
<input type="text" name="mb_addr3" value="<?php echo $member['mb_addr3'] ?>" id="reg_mb_addr3" class="frm_input frm_address" size="50" readonly="readonly">
<input type="hidden" name="mb_addr_jibeon" value="<?php echo $member['mb_addr_jibeon']; ?>">

아래 내용은 삭제 되었습니다.

$("#reg_mb_zip1, #reg_mb_zip2, #reg_mb_addr1").attr("readonly", true);

- 끝 -

댓글 작성

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

로그인하기

댓글 10개

감사합니다. 추천이 있다면 추천 누르고 싶네요.
감사합니다.....
이전에 만들어 놓은것을 자주 이 페이지을 보면서 수정하느라
엄청난 도움이 되고 있습니다......

제가 가진게 약간 이전 버젼이라서 덧붙여 봅니다

[ member.skin.php ]

<button type="button" class="btn_frmline" onclick="win_zip('fregisterform', 'mb_zip1', 'mb_zip2', 'mb_addr1', 'mb_addr2', 'mb_addr3', 'mb_addr_jibeon');">주소 검색</button>

[ common.js ]
var win_zip = function(frm_name, frm_zip1, frm_zip2, frm_addr1, frm_addr2, frm_addr3, frm_jibeon) {
if(typeof daum === 'undefined'){
alert("다음 juso.js 파일이 로드되지 않았습니다.");
return false;
}

new daum.Postcode({
oncomplete: function(data) {
// 팝업에서 검색결과 항목을 클릭했을때 실행할 코드를 작성하는 부분.
// 우편번호와 주소 정보를 해당 필드에 넣고, 커서를 상세주소 필드로 이동한다.
var of = document[frm_name];
of[frm_zip1].value = data.postcode1;
of[frm_zip2].value = data.postcode2;
of[frm_addr1].value = data.address1;
of[frm_addr2].value = "";
of[frm_addr3].value = "";

if( data.addressType == "R" ){ //도로명이면
of[frm_addr3].value = data.address2;
}
if(of[frm_jibeon] !== undefined){
of[frm_jibeon].value = data.addressType;
}

of[frm_addr2].focus();
}
}).open();

}
Fatal error: Call to a member function merge_javascript() on a non-object in D:\APM_Setup\htdocs\lib\common.lib.php on line 2420

이 에러가 나는데 왜 그런건가요? 알려주시면 감사하겠습니다.
merge_javascript 함수가 존재하지 않아서 생기는 오류입니다.

그누보드 최신버젼에서
/lib/common.lib.php

파일 보시고 함수가 없다면 추가해 주세요.
html_process class 안에 함수는 있습니다.

function add_javascript($javascript, $order=0)
{
global $html_process;

if(trim($javascript))
$html_process->merge_javascript($javascript, $order);
}

class html_process {
protected $css = array();
protected $js = array();

function merge_stylesheet($stylesheet, $order)
{
$links = $this->css;
$is_merge = true;

foreach($links as $link) {
if($link[1] == $stylesheet) {
$is_merge = false;
break;
}
}

if($is_merge)
$this->css[] = array($order, $stylesheet);
}

function merge_javascript($javascript, $order)
{
$scripts = $this->js;
$is_merge = true;

foreach($scripts as $script) {
if($script[1] == $javascript) {
$is_merge = false;
break;
}
}

if($is_merge)
$this->js[] = array($order, $javascript);
}

function run()
{
global $config, $g5, $member;

// 현재접속자 처리
$tmp_sql = " select count(*) as cnt from {$g5['login_table']} where lo_ip = '{$_SERVER['REMOTE_ADDR']}' ";
$tmp_row = sql_fetch($tmp_sql);

if ($tmp_row['cnt']) {
$tmp_sql = " update {$g5['login_table']} set mb_id = '{$member['mb_id']}', lo_datetime = '".G5_TIME_YMDHIS."', lo_location = '{$g5['lo_location']}', lo_url = '{$g5['lo_url']}' where lo_ip = '{$_SERVER['REMOTE_ADDR']}' ";
sql_query($tmp_sql, FALSE);
} else {
$tmp_sql = " insert into {$g5['login_table']} ( lo_ip, mb_id, lo_datetime, lo_location, lo_url ) values ( '{$_SERVER['REMOTE_ADDR']}', '{$member['mb_id']}', '".G5_TIME_YMDHIS."', '{$g5['lo_location']}', '{$g5['lo_url']}' ) ";
sql_query($tmp_sql, FALSE);

// 시간이 지난 접속은 삭제한다
sql_query(" delete from {$g5['login_table']} where lo_datetime < '".date("Y-m-d H:i:s", G5_SERVER_TIME - (60 * $config['cf_login_minutes']))."' ");

// 부담(overhead)이 있다면 테이블 최적화
//$row = sql_fetch(" SHOW TABLE STATUS FROM `$mysql_db` LIKE '$g5['login_table']' ");
//if ($row['Data_free'] > 0) sql_query(" OPTIMIZE TABLE $g5['login_table'] ");
}

$buffer = ob_get_contents();
ob_end_clean();

$stylesheet = '';
$links = $this->css;

if(!empty($links)) {
foreach ($links as $key => $row) {
$order[$key] = $row[0];
$index[$key] = $key;
$style[$key] = $row[1];
}

array_multisort($order, SORT_ASC, $index, SORT_ASC, $links);

foreach($links as $link) {
if(!trim($link[1]))
continue;

$stylesheet .= PHP_EOL.$link[1];
}
}

$javascript = '';
$scripts = $this->js;
$php_eol = '';

unset($order);
unset($index);

if(!empty($scripts)) {
foreach ($scripts as $key => $row) {
$order[$key] = $row[0];
$index[$key] = $key;
$script[$key] = $row[1];
}

array_multisort($order, SORT_ASC, $index, SORT_ASC, $scripts);

foreach($scripts as $js) {
if(!trim($js[1]))
continue;

$javascript .= $php_eol.$js[1];
$php_eol = PHP_EOL;
}
}

/*
</title>
<link rel="stylesheet" href="default.css">
밑으로 스킨의 스타일시트가 위치하도록 하게 한다.
*/
$buffer = preg_replace('#(</title>[^<]*<link[^>]+>)#', "$1$stylesheet", $buffer);

/*
</head>
<body>
전에 스킨의 자바스크립트가 위치하도록 하게 한다.
*/
$buffer = preg_replace('#(</head>[^<]*<body[^>]*>)#', "$javascript\n$1", $buffer);

return $buffer;
}
}
common.php 에서

맨 마지막 줄에

$html_process = new html_process();

를 추가해 주세요.
아 되네요 정말 감사합니다. 즐건 크리스마스 보내세요~ ^^
네 ^^ 메리크리스마스 ~
도로명 신주소 적용

게시판 목록

그누보드5 다운로드

SIR은 그누보드를 만들 뿐 프로그램의 설치, 운영방법, 설정문제에 관한 도움을 드리지는 않습니다.
글쓰기
🐛 버그신고