Extra Form
PHP PHP 8.2
CMS Rhymix 2.1

항상 도움을 많이 받고 있습니다.

다름이 아니라 게시판의 스킨에서 특정 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("담당자가 지정 되지 않았습니다.");
}

 

 

 

 

exec_json으로 만약 해결이 안된다면, 외부 페이지를 ajax로 호출하여 return 받는것이 최선일지요?

감사합니다.

  • Lv37

    updateDocumentExtraVar는 외부에서 직접 호출할 수 없는 내부 함수입니다. 말씀하신 것처럼, 다른 함수나 외부 페이지에서 ajax 요청을 받아서 전달해 주어야 하겠습니다. 권한 체크도 필요하고요.

    외부에서 직접 호출할 수 있는 함수들은 module.xml에 정의되어 있습니다. module.xml에 원래 없던 함수를 추가한다고 정상 작동하지는 않습니다. 외부에서 호출하면 일반적인 함수의 인자가 아닌 Context를 통해 사용자 전송값을 받아와야 하는데, 내부용 함수들은 Context를 참조하지 않기 때문입니다.

  • ? Lv2
    별도로 모듈이나 애드온 하나 제작하신다음에 act 지정하셔서 호출하시면 가능합니다.
  • Lv3

    모두 감사드립니다.

    애드온이나 모듈을 만들기에는 자그마한 기능이어서, 외부 페이지로 해결을 보고자 했습니다.

     

    제가 해결한 방법은 외부파일로 rhymix 인스턴스를 가져오고

    해당 게시판의 var_eid와 value를 변경하는 방법으로 처리 했습니다.

     

    <?php
    
        //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>";
    
    ?>

     

    일단 이 코드만 사용하더라도 작동하지만, 보완해야할 점이 많은 코드입니다.

     

    참고만 하시기 바라겠습니다.

  • Lv3 Lv37

    일단 라이믹스를 인클루드하셨다면 쿼리도 필요없고 filter_input도 필요없는데

    굳이 어려운 방식으로 코딩을 하시네요 ㅡ.ㅡ

     

    <?php
    
    // 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');
     
  • Lv37 Lv3
    이런 좋은 방법이 있었군요... 되게 바보같았군요..
  • Lv3 Lv37
    네, 외부에서 updateDocumentExtraVar를 직접 호출할 수 없는 것이 문제이니,
    updateDocumentExtraVar까지 가는 데 필요한 최소한의 다리만 놓아 주면 됩니다.^^