팁/튜토리얼

filter xml 을 걷어내봅시다

2025.03.10 09:14
29
0
0

찾아보니 작년 7월에 물어본 건데 그 때도 하다 말았군요. 이 참에 정리해둡니다.

https://rhymix.org/qna/1831410

이런 일이 일년에 한번 있을까 말까 하니 늘 하는 작업들이긴 해도 케이스에 따라 수정방법이 다르기 때문에

일일이 기억하기 어렵군요. ㅠㅠ

 

 

템플릿 문법 v2에서는 과거의 이런 filter를 못 사용합니다.

@unload('filters/cancel_charge.xml')
@unload('filters/approve_charge.xml')

unload 해주거나 해당 줄을 삭제하면 됩니다.

 

오래된 모듈 중에 하나인 pointcharge 모듈을 수정하고 있는데요. 

코드를 역추적하는 시스템입니다. 순서는 1,2,3으로 썼지만, 3,2,1 순으로 추적해서 찾아가는 식입니다.


기존 방식

 

1. modules/pointcharge/pointcharge.admin.view.php
 class pointchargeAdminView extends pointcharge {
Context::addJsFile($this->module_path.'tpl/js/pointcharge_admin.js');
}
pointcharge.admin.view.php에서 충전승인 js 코드 불러옴

 

2. pointcharge_admin.js
/* 충전승인*/
function doApproveCharge(charge_srl) {
    console.log('충전승인');
    var fo_obj = xGetElementById('fo_charge');
    fo_obj.charge_srl.value = charge_srl;
    procFilter(fo_obj, approve_charge);

}

 /* 충전취소*/
function doCancelCharge(charge_srl) {
    var fo_obj = xGetElementById('fo_charge');
    fo_obj.charge_srl.value = charge_srl;
    procFilter(fo_obj, cancel_charge);

}
설명 : procFilter()를 사용하고 있음. 이 방식은 구 방식이므로 변경해야함

 

3. modules/pointcharge/tpl/standby_list.html
<a href="#" onclick="doApproveCharge('{$val->charge_srl}');return false;" title="{$lang->approve_charge}">{$lang->approve_charge}</a>
<a href="#" onclick="doCancelCharge('{$val->charge_srl}');return false;" title="{$lang->charge_cancel}">{$lang->charge_cancel}</a>

관리자 충전승인/승인취소화면에서 doApproveCharge(), doCancelCharge() 함수를 실행하고 있음.

 


이제 분석은 끝났으니 필요한 pointcharge_admin.js 의 해당 코드를 수정하면 됩니다.


```
/* 충전승인 */
function doApproveCharge(charge_srl) {
    $.ajax({
        url: './',
        type: 'POST',
        data: {
            act: 'procPointchargeAdminApproveCharge',
            charge_srl: charge_srl
        },
        success: function(response) {
            alert('충전승인');
            if (response.error == 0) {
                location.reload();
            }
        },
        error: function() {
            alert('Error occurred while approving charge.');
        }
    });
}

/* 충전취소 */
function doCancelCharge(charge_srl) {
    $.ajax({
        url: './',
        type: 'POST',
        data: {
            act: 'procPointchargeAdminCancelCharge',
            charge_srl: charge_srl
        },
        success: function(response) {
            alert('충전취소');
            if (response.error == 0) {
                location.reload();
            }
        },
        error: function() {
            alert('Error occurred while canceling charge.');
        }
    });
}
```

 

좀 더 코드를 디벨롭해보면 아래와 같이 수정 가능합니다.

 

jQuery(function($) {
    function sendChargeRequest(action, charge_srl) {
        if (!charge_srl || isNaN(charge_srl)) {
            alert('올바른 충전 번호를 입력하세요.');
            return;
        }

        let confirmMessage = (action === 'approve') ? '정말 승인하시겠습니까?' : '정말 취소하시겠습니까?';
        if (!confirm(confirmMessage)) return;

        $.post(
            "./",  // Rhymix는 기본적으로 현재 모듈 URL을 처리하므로 "./" 사용 가능
            {
                act: (action === 'approve') ? 'procPointchargeAdminApproveCharge' : 'procPointchargeAdminCancelCharge',
                charge_srl: charge_srl
            },
            function(response) {
                if (response.error) {
                    alert(response.message);
                } else {
                    alert((action === 'approve') ? '충전이 승인되었습니다.' : '충전이 취소되었습니다.');
                    location.reload(); // 새로고침하여 변경사항 반영
                }
            },
            'json'
        );
    }

    window.doApproveCharge = function(charge_srl) {
        sendChargeRequest('approve', charge_srl);
    };

    window.doCancelCharge = function(charge_srl) {
        sendChargeRequest('cancel', charge_srl);
    };
});
 

저도 인터넷에서 코딩 배웠어요. 더 좋은 방법은 언제나 감사합니다. (__)/

 

eond Lv. 12

댓글 0