누리고에서 상품 취소 시 취소 사유를 입력받게 해달라는 요청이 있어서 작업한 팁입니다.
기본 동작이니 공부하실 분은 참조해서 작업하시면 됩니다.
1. 취소 사유 입력받는 폼
modules/nproduct/skins/jslocalprograms/itemdetail.blade.php
<form action="/" method="POST" id="fo_refund">
<label for="reason">환불 사유:</label>
<input type="hidden" name="act" value="procNstoreRefund" />
<input id="refund" name="refund" required value="취소사유입니다"/>
<input type="hidden" name="order_srl" value="3196" placeholder="주문번호">
<button type="submit">환불 요청</button>
</form>
기본 폼은 이렇습니다.
팁으로 라이믹스에서는 class="rx_ajax" 추가하면 ajax로 페이지 이동 없이 동작이 됩니다.
그러면 컨트롤러에서 아래 코드를 집어넣지 않아도 페이지 전환없이 잘 동작됩니다.
if (Context::get('success_return_url')) { $this->setRedirectUrl(Context::get('success_return_url')); }
2. 동작하는 기능
nstore.controller.php 파일에서
function procNstoreRefund() 함수를 만들어줍니다.
function procNstoreRefund(){
$oNstoreController = getController('nstore');
$order_srl = Context::get('order_srl');
// $order_info = getModel('nstore')->getOrderInfo($order_srl);
$logged_info = Context::get('logged_info');
if($logged_info->is_admin !== 'Y')
{
if($logged_info->member_srl !== $order_info->member_srl)
{
return $this->makeObject(-1, 'msg_not_permitted');
}
}
// $order_status = Context::get('order_status');
// $args->order_srl = $order_srl;
// $args->order_status = $order_status;
// $output = $oNstoreController->updateStock($order_srl, $order_status);
// $output = $this->updateOrderStatus($order_srl, $args);
$args = new stdClass();
$args->order_srl = Context::get('order_srl');
$args->refund = Context::get('refund');
$output = executeQuery('nstore.updateRefund', $args);
if(!$output->toBool())
{
return $output;
}
return $this->makeObject();
}
3. 동작하는 쿼리문
modules/nstore/queries/updateRefund.xml
<query id="updateRefund" action="update">
<tables>
<table name="nstore_order" />
</tables>
<columns>
<column name="refund" var="refund" />
</columns>
<conditions>
<condition operation="equal" column="order_srl" var="order_srl" notnull="notnull" />
</conditions>
</query>
4. DB 쿼리문 업데이트
rx_nstore_order 테이블에 refund 라는 컬럼을 varchar 250 unicode-utf8로 생성해줍니다.
5. nstore 모듈 스키마에서도 추가하도록 해줬습니다.
modules/nstore/schemas/nstore_order.xml
<column name="refund" type="varchar" size="250" />