템플릿 문법 v2에서는 과거의 이런 filter를 못 사용합니다.
@unload('filters/cancel_charge.xml') @unload('filters/approve_charge.xml')
unload 해주거나 해당 줄을 삭제하면 됩니다.
오래된 모듈 중에 하나인 pointcharge 모듈을 수정하고 있는데요.
(남의 코드 분석하는게 시간이 좀 걸리는 일인데
개인적으로는 곧 AI로 이런 일을 손쉽게 할 수 있을거라 생각됩니다.
요즘 이온디에서는 AI를 활용한 코딩을 적극 권장하고 있습니다.
그 전에 분석해서 어떻게 동작되고 있는지까지는 아직 전체 소스 구조를 파악해야하기 때문에
온라인에서 제공되는 ChatGPT나 Claude 등의 채팅 AI에서는 어렵고
커서나 windsurf 는 써본 적이 없어서 잘 모르겠습니다. (돈을 좀 벌면 써보겠습니다.ㅠㅠ)
저는 phpstorm을 사용하는데, AI플러그인으로 copilot이나 AI Assistant가 있습니다.
Copliot은 한달에 약간의 크레딧을 무료로 제공하고 있습니다. 가끔 모를 때 물어보는 용도로 씁니다.)
사설이 길었는데, 이런 이유로 분석부터 해야합니다.
코드를 역추적하는 시스템입니다. 순서는 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() 함수를 실행하고 있음.
AI를 활용하면 이런 구조를 설명한 뒤에
[프롬프트] .. 를 하면 됩니다만,
그 전에 라이믹스가 어떤 식으로 동작되는지를 알려주어야 할지도 모르겠군요. AI모델에 따라서 학습이 필요할 수도 있습니다.
이 정도는 LLM을 사용하거나 RAG로 알려주는게 아니라도 간단하게 방법을 설명하는게 도움이 됩니다.
[프롬프트1] 'XML JS 필터 로딩은 지원하지 않습니다. 템플릿 문법 v2를 사용하여 제작하는 신규 자료에서는 룰셋(ruleset)이나 XML JS 필터를 사용하는 것을 권장하지 않습니다.'
[프롬프트2] (코드구조설명) 코드 수정
답변1. Copilot의 답변
`procFilter`를 사용하는 기존 방식을 AJAX 요청으로 변경하여 더 현대적인 방식으로 수정할 수 있습니다. 다음은 그 방법입니다.
1. `modules/pointcharge/pointcharge.admin.view.php` 파일에서 JavaScript 파일을 추가하는 부분은 그대로 유지합니다.
2. `pointcharge_admin.js` 파일에서 `doApproveCharge`와 `doCancelCharge` 함수를 AJAX 요청으로 변경합니다.
3. `modules/pointcharge/tpl/standby_list.html` 파일에서 링크를 클릭할 때 AJAX 요청을 실행하도록 합니다.
### 1. `modules/pointcharge/pointcharge.admin.view.php`
이 부분은 변경할 필요가 없습니다.
### 2. `pointcharge_admin.js`
```javascript
/* 충전승인 */
function doApproveCharge(charge_srl) {
console.log('충전승인');
$.ajax({
url: './',
type: 'POST',
data: {
act: 'procPointchargeAdminApproveCharge',
charge_srl: charge_srl
},
success: function(response) {
alert(response.message);
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(response.message);
if (response.error == 0) {
location.reload();
}
},
error: function() {
alert('Error occurred while canceling charge.');
}
});
}
```
### 3. `modules/pointcharge/tpl/standby_list.html`
```html
<td class="nowr"><a href="#" onclick="doApproveCharge('{$val->charge_srl}');return false;" title="{$lang->approve_charge}">{$lang->approve_charge}</a></td>
<td class="nowr"><a href="#" onclick="doCancelCharge('{$val->charge_srl}');return false;" title="{$lang->charge_cancel}">{$lang->charge_cancel}</a></td>
```
이렇게 하면 `doApproveCharge`와 `doCancelCharge` 함수가 AJAX 요청을 사용하여 충전 승인 및 취소를 처리하게 됩니다.
답변2. ChatGPT의 답변
기존 방식 분석
pointcharge.admin.view.php
에서pointcharge_admin.js
를 불러옴.pointcharge_admin.js
에서procFilter()
를 사용하여 충전 승인 및 취소 처리.standby_list.html
에서doApproveCharge()
및doCancelCharge()
함수가 호출됨.- 문제점:
procFilter()
는 구 방식이므로 Rhymix 템플릿 v2에서는 사용할 수 없음.
변경 방향
- XML 필터 제거 및 AJAX 요청 처리
procFilter()
제거 후 jQuery 기반 AJAX로 변경- 기존
standby_list.html
의 onclick 이벤트 수정
수정 코드
1. pointcharge_admin.js
수정 (AJAX 기반)
```
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);
};
});
```
2. standby_list.html
수정 (onclick -> 새로운 함수 연결)
```
<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()
함수 이름 유지하여, 기존 템플릿을 수정할 필요 없음.
3. pointcharge.admin.view.php
에서 JS 파일 불러오는 코드 유지
class pointchargeAdminView extends pointcharge {
function init() {
Context::addJsFile($this->module_path . 'tpl/js/pointcharge_admin.js');
}
}
✅ 변경 사항 없음 → 기존 방식 유지.
정리
✅ procFilter()
를 제거하고 AJAX 요청 방식으로 변경
✅ standby_list.html
의 onclick 이벤트 기존 함수명 유지
✅ pointcharge_admin.js
에서 기능을 sendChargeRequest()
로 통합
✅ pointcharge.admin.view.php
는 기존 방식 유지
이제 템플릿 v2에서도 정상적으로 충전 승인 및 취소 기능을 사용할 수 있습니다. 🚀