exec_json으로 updateDocumentExtraVar 를 실행할 수 있을까요?
CMS/프레임워크 | Rhymix 2.1 |
---|---|
개발 언어 | PHP 8.2 |
항상 도움을 많이 받고 있습니다.
다름이 아니라 게시판의 스킨에서 특정 Select box등의 변수를 자바스크립트에서 받아서
exec_json 으로 updateDocumentExtraVar를 실행하고자 합니다.
아래와 같이 확장변수에 값을 넣기 위해 자바스크립트로 코드를 작성했는데, ACT가 실행이 되지 않는 것인지 아니면 다른 방법이 있는지 제대로 된 실행이 되지 않습니다.
if (confirm(selectedText + "를 담당자로 지정할까요?")) {
//만약 지정을 원하는 경우
var status_params = {
value: "WAIT",
edit: "status",
module_srl: module_srl,
document_srl: document_srl,
var_idx: 1,
};
exec_json("board.updateDocumentExtraVar", status_params, return_desire);
} else {
//지정을 취소한 경우
alert("담당자가 지정 되지 않았습니다.");
}
//만약 지정을 원하는 경우
var status_params = {
value: "WAIT",
edit: "status",
module_srl: module_srl,
document_srl: document_srl,
var_idx: 1,
};
exec_json("board.updateDocumentExtraVar", status_params, return_desire);
} else {
//지정을 취소한 경우
alert("담당자가 지정 되지 않았습니다.");
}
exec_json으로 만약 해결이 안된다면, 외부 페이지를 ajax로 호출하여 return 받는것이 최선일지요?
감사합니다.
얼음조각티
Lv. 3
:)
댓글 6
updateDocumentExtraVar는 외부에서 직접 호출할 수 없는 내부 함수입니다. 말씀하신 것처럼, 다른 함수나 외부 페이지에서 ajax 요청을 받아서 전달해 주어야 하겠습니다. 권한 체크도 필요하고요.
외부에서 직접 호출할 수 있는 함수들은 module.xml에 정의되어 있습니다. module.xml에 원래 없던 함수를 추가한다고 정상 작동하지는 않습니다. 외부에서 호출하면 일반적인 함수의 인자가 아닌 Context를 통해 사용자 전송값을 받아와야 하는데, 내부용 함수들은 Context를 참조하지 않기 때문입니다.
모두 감사드립니다.
애드온이나 모듈을 만들기에는 자그마한 기능이어서, 외부 페이지로 해결을 보고자 했습니다.
제가 해결한 방법은 외부파일로 rhymix 인스턴스를 가져오고
해당 게시판의 var_eid와 value를 변경하는 방법으로 처리 했습니다.
//Rhymix Initialize
require_once $_SERVER['DOCUMENT_ROOT'].'/config/config.inc.php';
$oContext = &Context::getInstance();
$oContext->init();
$module_srl = filter_input(INPUT_POST, 'module_srl', FILTER_VALIDATE_INT);
$document_srl = filter_input(INPUT_POST, 'doc_srl', FILTER_VALIDATE_INT);
if ($module_srl === false || $document_srl === false) {
die('사용 방법을 확인하고 다시 시도 하시기 바랍니다.');
}
echo "Module_srl :".$module_srl."<br>";
echo "Document_srl :".$document_srl."<br>";
$ticket_args = new stdClass();
$ticket_args->eid = "status";
$ticket_args->value = "OPEN";
$ticket_args->module_srl = $module_srl;
$ticket_args->document_srl = $document_srl;
$ticket_args->var_idx = 1;
$result = executeQuery('document.updateDocumentExtraVar', $ticket_args);
echo "<pre>";
var_dump($result);
echo "</pre>";
?>
일단 이 코드만 사용하더라도 작동하지만, 보완해야할 점이 많은 코드입니다.
참고만 하시기 바라겠습니다.
일단 라이믹스를 인클루드하셨다면 쿼리도 필요없고 filter_input도 필요없는데
굳이 어려운 방식으로 코딩을 하시네요 ㅡ.ㅡ
// Rhymix initialization
include $_SERVER['DOCUMENT_ROOT'] . '/common/autoload.php';
Context::init();
// _srl로 끝나는 변수는 숫자만 들어가도록 이미 필터링되어 있음
$module_srl = Context::get('module_srl');
$document_srl = Context::get('document_srl');
(중략)
$result = DocumentController::updateDocumentExtraVar($module_srl, $document_srl, 'status', 'OPEN');
updateDocumentExtraVar까지 가는 데 필요한 최소한의 다리만 놓아 주면 됩니다.^^