Add krzip module

This commit is contained in:
Kijin Sung 2016-01-05 09:55:33 +09:00
parent 1a8b5c8b29
commit 7bef97f170
26 changed files with 1611 additions and 0 deletions

View file

@ -0,0 +1,51 @@
<!--// HEADER -->
<load target="./js/admin.js" />
<div class="x_page-header">
<h1>
{$lang->krzip}
<a href="#descModule" class="x_icon-question-sign" data-toggle="#descModule">{$lang->help}</a>
</h1>
</div>
<p id="descModule" class="x_alert x_alert-info" hidden="hidden">{$lang->about_krzip}</p>
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/krzip/tpl/config/1'" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>
<!--// BODY -->
<section class="section">
<form ruleset="krzipConfig" class="x_form-horizontal" action="{getUrl('')}" method="post">
<input type="hidden" name="module" value="krzip" />
<input type="hidden" name="act" value="procKrzipAdminInsertConfig" />
<input type="hidden" name="success_return_url" value="{getRequestUriByServerEnviroment()}" />
<input type="hidden" name="xe_validator_id" value="modules/krzip/tpl/config/1" />
<section class="section">
<h1>{$lang->subtitle_primary}</h1>
<div class="x_control-group">
<label class="x_control-label" for="api_handler">{$lang->cmd_krzip_api_type}</label>
<div class="x_controls">
<select name="api_handler" id="api_handler">
<option value="0">{$lang->cmd_krzip_daumapi}</option>
<option value="1" selected="selected"|cond="$module_config->api_handler == 1">{$lang->cmd_krzip_epostapi}</option>
<option value="2" selected="selected"|cond="$module_config->api_handler == 2">{$lang->cmd_krzip_postcodify}</option>
</select>
<a href="#about_api_handler" class="x_icon-question-sign" data-toggle="#about_api_handler">{$lang->help}</a>
<p id="about_api_handler" class="x_help-block" hidden="hidden">{$lang->about_krzip_api_handler}</p>
</div>
</div>
<div class="x_control-group">
<label class="x_control-label" for="epostapi_regkey">{$lang->cmd_krzip_regkey}</label>
<div class="x_controls">
<input type="text" name="epostapi_regkey" id="epostapi_regkey" value="{htmlspecialchars($module_config->epostapi_regkey, ENT_COMPAT | ENT_HTML401, 'UTF-8', FALSE)}" disabled="disabled"|cond="$module_config->api_handler != 1" />
<a href="#about_epostapi_regkey" class="x_icon-question-sign" data-toggle="#about_epostapi_regkey">{$lang->help}</a>
<p id="about_epostapi_regkey" class="x_help-block" hidden="hidden">{$lang->about_krzip_epostapi_regkey}</p>
</div>
</div>
</section>
<div class="btnArea">
<button type="submit" class="x_btn x_btn-primary x_pull-right">{$lang->cmd_registration}</button>
</div>
</form>
</section>

View file

@ -0,0 +1,27 @@
@charset "UTF-8";
/* Copyright (C) NAVER <http://www.navercorp.com> */
.krZip label {
min-width: 70px;
}
.krZip .krzip-postcode,
.krZip .krzip-roadAddress,
.krZip .krzip-jibunAddress,
.krZip .krzip-extraAddress,
.krZip .krzip-detailAddress {
min-width: 20%;
height: 24px;
line-height: 24px;
margin: 0;
padding: 0;
border: 1px solid #CCC;
}
.krZip .krzip-guide {
display: none;
height: 24px;
line-height: 24px;
color: #888;
}
/* End of file default.css */
/* Location: ./modules/krzip/tpl/css/default.css */

View file

@ -0,0 +1,86 @@
@charset "UTF-8";
/* Copyright (C) NAVER <http://www.navercorp.com> */
body {
margin: 0;
background: #EEE;
}
.x .krZip .krzip-search-wrap,
.krZip .krzip-search-wrap {
position: relative;
height: 45px;
line-height: 45px;
border-bottom: 1px solid #DDD;
background: #FFF;
}
.x .krZip .krzip-input-wrap,
.krZip .krzip-input-wrap {
margin: 0 70px 0 10px;
}
.x .krZip .krzip-input,
.krZip .krzip-input {
width: 100%;
height: 45px;
line-height: 45px;
margin: 0;
padding: 0;
border: 0;
outline: 0;
font-size: 20px;
background: none;
box-shadow: none;
-moz-border-radius: 0;
-webkit-border-radius: 0;
border-radius: 0;
-moz-transition: none;
-o-transition: none;
-webkit-transition: none;
transition: none;
}
.x .krZip .krzip-input:focus,
.krZip .krzip-input:focus {
outline: 0;
box-shadow: none;
}
.x .krZip .krzip-search,
.krZip .krzip-search {
position: absolute;
top: 0;
right: 10px;
width: 50px;
height: 45px;
line-height: 45px;
margin: 0;
padding: 0;
border: 0;
outline: 0;
background: url(../img/search.png) center center no-repeat;
}
.x .krZip .krzip-addressList,
.krZip .krzip-addressList {
overflow: auto;
height: 300px;
margin: 10px;
border: 1px solid #DDD;
background: #FFF;
list-style: none;
-moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
-webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
}
.x .krZip .krzip-addressList li,
.krZip .krzip-addressList li {
height: 40px;
line-height: 40px;
padding: 0 10px;
border-bottom: 1px solid #DDD;
}
.x .krZip .krzip-addressList li:hover,
.krZip .krzip-addressList li:hover {
cursor: pointer;
text-decoration: underline;
background: #F8F8F8;
}
/* End of file popup.css */
/* Location: ./modules/krzip/tpl/css/popup.css */

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

View file

@ -0,0 +1,11 @@
/* Copyright (C) NAVER <http://www.navercorp.com> */
jQuery(function ($) {
$("#api_handler").on("change", function (e) {
var prop = $(this).val() != 1;
$("#epostapi_regkey").prop("disabled", prop);
});
});
/* End of file admin.js */
/* Location: ./modules/krzip/tpl/js/admin.js */

View file

@ -0,0 +1,107 @@
/* Copyright (C) NAVER <http://www.navercorp.com> */
(function ($) {
"use strict";
$.fn.Krzip = function () {
var $this = $(this);
var values = {
postcode : $this.find(".krzip-hidden-postcode"),
roadAddress : $this.find(".krzip-hidden-roadAddress"),
jibunAddress : $this.find(".krzip-hidden-jibunAddress"),
detailAddress : $this.find(".krzip-hidden-detailAddress"),
extraAddress : $this.find(".krzip-hidden-extraAddress")
};
var ui = {
postcode : $this.find(".krzip-postcode"),
roadAddress : $this.find(".krzip-roadAddress"),
jibunAddress : $this.find(".krzip-jibunAddress"),
detailAddress : $this.find(".krzip-detailAddress"),
extraAddress : $this.find(".krzip-extraAddress"),
search : $this.find(".krzip-search"),
guide : $this.find(".krzip-guide")
};
var krzip = new daum.Postcode({
oncomplete: function (response) {
var fullAddr = "", extraAddr = "";
/* 도로명 주소를 선택했을 경우 */
if(response.userSelectedType === "R") {
fullAddr = response.roadAddress;
/* 법정동명이 있을 경우 */
if(response.bname !== "") {
extraAddr += response.bname;
}
/* 건물명이 있을 경우 */
if(response.buildingName !== "") {
extraAddr += (extraAddr !== "" ? ", " + response.buildingName : response.buildingName);
}
if(extraAddr) {
extraAddr = "(" + extraAddr + ")";
}
}
/* 지번 주소를 선택했을 경우 */
else {
fullAddr = response.jibunAddress;
}
/* 우편번호 저장 */
ui.postcode.val(response.zonecode).trigger("change");
/* 도로명 주소 저장 */
var roadAddr = (response.userSelectedType === "R" ? fullAddr : response.roadAddress);
ui.roadAddress.val(roadAddr).trigger("change");
/* 지번 주소 저장 */
var jibunAddr = (response.userSelectedType === "R" ? response.jibunAddress : fullAddr);
ui.jibunAddress.val(jibunAddr ? "(" + jibunAddr + ")" : jibunAddr).trigger("change");
/* 부가 주소 저장 */
ui.extraAddress.val(extraAddr).trigger("change");
/* 예상 주소 저장 */
ui.guide.hide().html("");
if(response.autoRoadAddress) {
var expRoadAddr = (response.autoRoadAddress + extraRoadAddr);
ui.guide
.html("(" + xe.lang.msg_krzip_road_address_expectation.replace("%s", expRoadAddr) + ")")
.show();
}
else if(response.autoJibunAddress) {
var expJibunAddr = response.autoJibunAddress;
ui.guide
.html("(" + xe.lang.msg_krzip_jibun_address_expectation.replace("%s", expJibunAddr) + ")")
.show();
}
/* 상세 주소로 커서 이동 */
ui.detailAddress.trigger("focus");
}
});
/* 상세 주소 저장 이벤트 등록 */
var i, val, key = ["postcode", "roadAddress", "jibunAddress", "detailAddress", "extraAddress"];
for(i = 0; i < key.length; i++) {
val = key[i];
ui[val].data("linked", val).on("change", function (e) {
var $this = $(this);
values[$this.data("linked")].val($this.val());
});
}
/* 검색 이벤트 등록 */
key = ["postcode", "roadAddress", "jibunAddress", "extraAddress", "search"];
for(i = 0; i < key.length; i++) {
val = key[i];
ui[val].on("click", function (e) {
krzip.open();
});
}
};
})(jQuery);
/* End of file daumapi.js */
/* Location: ./modules/krzip/tpl/js/daumapi.js */

View file

@ -0,0 +1,73 @@
/* Copyright (C) NAVER <http://www.navercorp.com> */
(function ($) {
"use strict";
$.fn.Krzip = function (order, data) {
var $this = $(this);
var values = {
postcode : $this.find(".krzip-hidden-postcode"),
roadAddress : $this.find(".krzip-hidden-roadAddress"),
jibunAddress : $this.find(".krzip-hidden-jibunAddress"),
detailAddress : $this.find(".krzip-hidden-detailAddress"),
extraAddress : $this.find(".krzip-hidden-extraAddress")
};
var ui = {
postcode : $this.find(".krzip-postcode"),
roadAddress : $this.find(".krzip-roadAddress"),
jibunAddress : $this.find(".krzip-jibunAddress"),
detailAddress : $this.find(".krzip-detailAddress"),
extraAddress : $this.find(".krzip-extraAddress"),
search : $this.find(".krzip-search")
};
var krzip = $this.data("krzip");
if(!krzip) {
krzip = {
open: function (query) {
var request_url = "./"
.setQuery("module", "krzip")
.setQuery("act", "dispKrzipSearchForm")
.setQuery("query", query);
popopen(request_url, $this.selector);
}
};
/* 상세 주소 저장 이벤트 등록 */
var i, val, key = ["postcode", "roadAddress", "jibunAddress", "detailAddress", "extraAddress"];
for(i = 0; i < key.length; i++) {
val = key[i];
ui[val].data("linked", val).on("change", function (e) {
var $this = $(this);
values[$this.data("linked")].val($this.val());
});
}
/* 검색 이벤트 등록 */
key = ["postcode", "roadAddress", "jibunAddress", "extraAddress", "search"];
for(i = 0; i < key.length; i++) {
val = key[i];
ui[val].on("click", function (e) {
var query = krzip.query;
krzip.open(query);
});
}
}
else if(order === "query" && data) {
krzip.query = data.query;
ui.postcode.val(data[0]).trigger("change");
ui.roadAddress.val(data[1]).trigger("change");
ui.jibunAddress.val(data[2]).trigger("change");
ui.extraAddress.val(data[4]).trigger("change");
ui.detailAddress.trigger("focus");
}
/* 인스턴스 저장 */
$this.data("krzip", krzip);
};
})(jQuery);
/* End of file epostapi.js */
/* Location: ./modules/krzip/tpl/js/epostapi.js */

View file

@ -0,0 +1,48 @@
/* Copyright (C) NAVER <http://www.navercorp.com> */
(function ($) {
"use strict";
$.fn.Krzip = function () {
var $this = $(this);
var ui = {
input : $this.find(".krzip-input"),
search : $this.find(".krzip-search"),
addressList : $this.find(".krzip-addressList")
};
/* 자식 요소 이벤트 등록 */
ui.search.on("click", function (e) {
exec_json(
"krzip.getKrzipCodeList",
{query: ui.input.val()},
function (response) {
var address_list = response.address_list;
$this.data("address_list", address_list);
for(var i = 0; i < address_list.length; i++) {
var val = address_list[i];
var $li = $("<li>").data("index", i).html(val.join(" "));
ui.addressList.html("").append($li);
}
},
function (response) {
$this.data("address_list", "");
ui.addressList.html("");
}
);
});
ui.addressList.on("click", "li", function (e) {
var address_list = $this.data("address_list"),
address = address_list[$(this).data("index")];
opener.jQuery(window.name).Krzip("query", address);
window.close();
});
ui.input.on("keydown", function (e) {
(e.keyCode == 13 && ui.search.trigger("click"));
});
};
})(jQuery);
/* End of file epostapi.search.js */
/* Location: ./modules/krzip/tpl/js/epostapi.search.js */

View file

@ -0,0 +1,55 @@
/* Copyright (C) NAVER <http://www.navercorp.com> */
(function ($) {
"use strict";
$.fn.Krzip = function () {
var $this = $(this);
var values = {
postcode : $this.find(".krzip-hidden-postcode"),
roadAddress : $this.find(".krzip-hidden-roadAddress"),
jibunAddress : $this.find(".krzip-hidden-jibunAddress"),
detailAddress : $this.find(".krzip-hidden-detailAddress"),
extraAddress : $this.find(".krzip-hidden-extraAddress")
};
var ui = {
postcode : $this.find(".krzip-postcode"),
roadAddress : $this.find(".krzip-roadAddress"),
jibunAddress : $this.find(".krzip-jibunAddress"),
detailAddress : $this.find(".krzip-detailAddress"),
extraAddress : $this.find(".krzip-extraAddress"),
search : $this.find(".krzip-search"),
guide : $this.find(".krzip-guide")
};
values.postcode.addClass("postcodify_postcode5");
values.roadAddress.addClass("postcodify_address");
values.jibunAddress.addClass("postcodify_jibeon_address");
values.detailAddress.addClass("postcodify_details");
values.extraAddress.addClass("postcodify_extra_info");
ui.postcode.addClass("postcodify_postcode5");
ui.roadAddress.addClass("postcodify_address");
ui.jibunAddress.addClass("postcodify_jibeon_address");
ui.detailAddress.addClass("postcodify_details");
ui.extraAddress.addClass("postcodify_extra_info");
ui.search.postcodifyPopUp({
inputParent : $this,
useFullJibeon : false,
requireExactQuery : false,
onSelect : function () {
var jibun = ui.jibunAddress.val();
if(jibun) {
values.jibunAddress.val("(" + jibun + ")");
ui.jibunAddress.val("(" + jibun + ")");
}
}
});
};
})(jQuery);
/* End of file postcodify.js */
/* Location: ./modules/krzip/tpl/js/postcodify.js */

View file

@ -0,0 +1,24 @@
<!--// 우체국 우편번호 API -->
<!--// HEADER -->
<load target="" />
<load target="./css/popup.css" index="100000" />
<load target="./js/epostapi.search.js" />
<!--// BODY -->
<div class="krZip" id="krzip-{$template_config->sequence_id}">
<div class="krzip-search-wrap">
<div class="krzip-input-wrap">
<input type="text" class="krzip-input" placeholder="{$lang->cmd_search}" />
</div>
<input type="button" class="krzip-search" />
</div>
<ul class="krzip-addressList">
</ul>
</div>
<!--// FOOTER -->
<script>
//<![CDATA[
jQuery("#krzip-{$template_config->sequence_id}").Krzip();
//]]>
</script>

View file

@ -0,0 +1,41 @@
<!--// 다음 우편번호 API -->
<!--// HEADER -->
{@$is_https = strtoupper(parse_url($current_url, 0)) == 'HTTPS'}
<load target="./css/default.css" />
<load target="http://dmaps.daum.net/map_js_init/postcode.v2.js" cond="!$is_https" />
<load target="https://spi.maps.daum.net/imap/map_js_init/postcode.v2.js" cond="$is_https" />
<load target="./js/daumapi.js" />
<!--// BODY -->
<div class="krZip" id="krzip-{$template_config->sequence_id}">
<input type="hidden" name="{$template_config->column_name}[]" class="krzip-hidden-postcode" value="{$template_config->values[0]}" />
<input type="hidden" name="{$template_config->column_name}[]" class="krzip-hidden-roadAddress" value="{$template_config->values[1]}" />
<input type="hidden" name="{$template_config->column_name}[]" class="krzip-hidden-jibunAddress" value="{$template_config->values[2]}" />
<input type="hidden" name="{$template_config->column_name}[]" class="krzip-hidden-detailAddress" value="{$template_config->values[3]}" />
<input type="hidden" name="{$template_config->column_name}[]" class="krzip-hidden-extraAddress" value="{$template_config->values[4]}" />
<div class="krzip-postcode-wrap">
<label>{$lang->cmd_krzip_postcode}</label>
<input type="text" class="krzip-postcode" value="{$template_config->values[0]}" disabled="disabled" />
<input type="button" class="krzip-search btn" value="{$lang->cmd_search}" />
</div>
<div class="krzip-address-wrap">
<label>{$lang->cmd_krzip_address}</label>
<input type="text" class="krzip-roadAddress" value="{$template_config->values[1]}" disabled="disabled" />
<input type="text" class="krzip-jibunAddress" value="{$template_config->values[2]}" disabled="disabled" />
<input type="text" class="krzip-extraAddress" value="{$template_config->values[4]}" disabled="disabled" />
</div>
<div class="krzip-detailAddress-wrap">
<label>{$lang->cmd_krzip_detail_address}</label>
<input type="text" class="krzip-detailAddress" value="{$template_config->values[3]}" />
</div>
<div class="krzip-guide"></div>
</div>
<!--// FOOTER -->
<script>
//<![CDATA[
xe.lang.msg_krzip_road_address_expectation = "{$lang->msg_krzip_road_address_expectation}";
xe.lang.msg_krzip_jibun_address_expectation = "{$lang->msg_krzip_jibun_address_expectation}";
jQuery("#krzip-{$template_config->sequence_id}").Krzip();
//]]>
</script>

View file

@ -0,0 +1,35 @@
<!--// 우체국 우편번호 API -->
<!--// HEADER -->
<load target="./css/default.css" />
<load target="./js/epostapi.js" />
<!--// BODY -->
<div class="krZip" id="krzip-{$template_config->sequence_id}">
<input type="hidden" name="{$template_config->column_name}[]" class="krzip-hidden-postcode" value="{$template_config->values[0]}" />
<input type="hidden" name="{$template_config->column_name}[]" class="krzip-hidden-roadAddress" value="{$template_config->values[1]}" />
<input type="hidden" name="{$template_config->column_name}[]" class="krzip-hidden-jibunAddress" value="{$template_config->values[2]}" />
<input type="hidden" name="{$template_config->column_name}[]" class="krzip-hidden-detailAddress" value="{$template_config->values[3]}" />
<input type="hidden" name="{$template_config->column_name}[]" class="krzip-hidden-extraAddress" value="{$template_config->values[4]}" />
<div class="krzip-postcode-wrap">
<label>{$lang->cmd_krzip_postcode}</label>
<input type="text" class="krzip-postcode" value="{$template_config->values[0]}" disabled="disabled" />
<input type="button" class="krzip-search btn" value="{$lang->cmd_search}" />
</div>
<div class="krzip-address-wrap">
<label>{$lang->cmd_krzip_address}</label>
<input type="text" class="krzip-roadAddress" value="{$template_config->values[1]}" disabled="disabled" />
<input type="text" class="krzip-jibunAddress" value="{$template_config->values[2]}" disabled="disabled" />
<input type="text" class="krzip-extraAddress" value="{$template_config->values[4]}" disabled="disabled" />
</div>
<div class="krzip-detailAddress-wrap">
<label>{$lang->cmd_krzip_detail_address}</label>
<input type="text" class="krzip-detailAddress" value="{$template_config->values[3]}" />
</div>
</div>
<!--// FOOTER -->
<script>
//<![CDATA[
jQuery("#krzip-{$template_config->sequence_id}").Krzip();
//]]>
</script>

View file

@ -0,0 +1,36 @@
<!--// Postcodify 우편번호 API -->
<!--// HEADER -->
<load target="./css/default.css" />
<load target="https://cdn.poesis.kr/post/search.min.js" />
<load target="./js/postcodify.js" />
<!--// BODY -->
<div class="krZip" id="krzip-{$template_config->sequence_id}">
<input type="hidden" name="{$template_config->column_name}[]" class="krzip-hidden-postcode" value="{$template_config->values[0]}" />
<input type="hidden" name="{$template_config->column_name}[]" class="krzip-hidden-roadAddress" value="{$template_config->values[1]}" />
<input type="hidden" name="{$template_config->column_name}[]" class="krzip-hidden-jibunAddress" value="{$template_config->values[2]}" />
<input type="hidden" name="{$template_config->column_name}[]" class="krzip-hidden-detailAddress" value="{$template_config->values[3]}" />
<input type="hidden" name="{$template_config->column_name}[]" class="krzip-hidden-extraAddress" value="{$template_config->values[4]}" />
<div class="krzip-postcode-wrap">
<label>{$lang->cmd_krzip_postcode}</label>
<input type="text" class="krzip-postcode" value="{$template_config->values[0]}" disabled="disabled" />
<input type="button" class="krzip-search btn" value="{$lang->cmd_search}" />
</div>
<div class="krzip-address-wrap">
<label>{$lang->cmd_krzip_address}</label>
<input type="text" class="krzip-roadAddress" value="{$template_config->values[1]}" disabled="disabled" />
<input type="text" class="krzip-jibunAddress" value="{$template_config->values[2]}" disabled="disabled" />
<input type="text" class="krzip-extraAddress" value="{$template_config->values[4]}" disabled="disabled" />
</div>
<div class="krzip-detailAddress-wrap">
<label>{$lang->cmd_krzip_detail_address}</label>
<input type="text" class="krzip-detailAddress" value="{$template_config->values[3]}" />
</div>
</div>
<!--// FOOTER -->
<script>
//<![CDATA[
jQuery("#krzip-{$template_config->sequence_id}").Krzip();
//]]>
</script>