Board, Documents 모듈을 참조하여 사용하는 모듈을 개발의뢰하여 사용하고 있었습니다.

Documents TABLE 에 추가 필드를 업데이트 하는 구조입니다.

 

XE 1.9 업데이트 이후 게시판 글쓰기(write) 시에.. 추가 필드를 이용하여 몇몇 정보를 document table 저장.

 

[  ] 옵션 1 , [  ] 옵션2 등.. 체크박스로 글을 작성(Insert) 하면 Insert/Update 작동되지 않아서

변경된 코드를 보다가 아래 처럼 해결하여 사용중입니다.

 

document.model.php

function getDocument() 부분에 아래와 같이 소스코드 추가 수정해서 사용중에 있습니다.

잘 작동됩니다.

           

$oDocument = new documentItem($document_srl, $load_extra_vars, $columnList);          
// 18.06.29 추가 시작
$GLOBALS['XE_DOCUMENT_LIST'][$document_srl] = $oDocument;
if($load_extra_vars) $this->setToAllDocumentExtraVars();
// end

 

라이믹스 2.0 에서는 이 마저도 소용이 없어졌네요.

코어를 수정하더라도 사용할 방법이 있을까요?

 

  • profile

    무엇을 어떻게 업데이트하려고 시도하고 계시고, 무엇이 안 된다는 것인지 좀더 자세히 설명해 주시면 도움이 되겠습니다. setToAllDocumentExtraVars를 사용하는 것 자체가 목적이라기보다는, 뭔가가 안 되어서 땜빵을 위해 그 함수를 사용하고 계셨는데 그 땜빵이 더이상 안 통해서 다른 방법을 찾고 있다는 말씀으로 읽히거든요. 애당초 무엇이 문제인지 알아야 그걸 어떻게 땜빵하는 게 맞는지 조언을 해드릴 수 있습니다.

  • profile profile

    https://github.com/rhymix/rhymix/issues/1002
    예전에 문의했었던 내용이 있었네요.

    계속 버전 업데이트가 되어도 저 부분을 Core 수정해서 이상 없이 게시물을 등록하고 있었습니다. 2.0 부터 동일한 값이 $this 를 self:: 변경하고 넣어보았으나 이제 작동 자체가 안되어서 혹시 방법이 있나 해서 문의를 해보았어요.

     

    DB 확인하면 값은 이상없이 들어가지는데 document.model.php / function getDocument () 여기에서 값을 지정못해오는거 같습니다. 첫 Insert 는 값을 가져오지 못하고,, 게시물 수정해서 다시 값을 넣고 update 일때는 값을 가져옵니다.

     

    제가 개발자가 아니라서.. 원시적인 설명밖에 못하는점 양해 바랍니다.

    $GLOBALS['XE_DOCUMENT_LIST'][$document_srl] = $oDocument;
    if($load_extra_vars) $this->setToAllDocumentExtraVars();

    DB에는 값이 존재하는데.. 왜 못가져오는걸까..

    이 짧은 두줄을 넣으면 글 등록과 값을 가져오는것도 이상이 없는데.. 빼면 두번째 update 시에는 반영이..

     

  • profile profile
    저 이슈를 등록하셨을 때도 뭔 소린지 알 수가 없었습니다... ㅠ

    직접 작성한 쿼리를 사용하여 DB에 확장변수를 입력한 후, getDocument를 사용하여 그 문서를 다시 불러오면 확장변수가 안 보인다는 것인가요? DB에는 정상적으로 입력되어 있고요? 아니면 쿼리 자체가 작동을 안 해서 애초에 DB에 입력조차 안 된다는 것인가요?

    만약 DB에는 정상적으로 입력되는데 getDocument를 했을 때 안 보인다면 캐시 문제일 가능성이 있고, 그렇다면 코어에서 좀더 적극적으로 캐시를 갱신하는 등의 방법으로 어느 정도 커버해 드릴 수 있을지도 모릅니다. 단, 글을 쓰는 도중에 (코어의 insertDocument 실행이 아직 끝나지도 않은 상태에서) 트리거 등을 사용하여 그 글을 다시 불러오려고 한다면 해결하기 어려울 수도 있습니다.
  • profile profile

     

    모듈명.class.php

    if(!$oModuleModel->getTrigger('document.insertDocument', '모듈명', 'controller', 'triggerInsertDocumentBefore', 'before')) return TRUE;
    if(!$oModuleModel->getTrigger('document.insertDocument', '모듈명', 'controller', 'triggerInsertDocumentAfter', 'after')) return TRUE;
    if(!$oModuleModel->getTrigger('document.updateDocument', '모듈명', 'controller', 'triggerUpdateDocumentBefore', 'before')) return TRUE;
    if(!$oModuleModel->getTrigger('document.updateDocument', '모듈명', 'controller', 'triggerUpdateDocumentAfter', 'after')) return TRUE;

     

    모듈명.controller.php

    function triggerInsertDocumentAfter(&$obj) {
            
                $oModuleModel = getModel('module');
                $module_info = $oModuleModel->getModuleInfoByModuleSrl($obj->module_srl);
                
                if( $module_info->module != '모듈명' ) return new BaseObject();
                
                return $this->updateExtraVars($obj);
            }
            function triggerUpdateDocumentBefore(&$obj) {
            
                $oModuleModel = getModel('module');
                $module_info = $oModuleModel->getModuleInfoByModuleSrl($obj->module_srl);
                
                if( $module_info->module != '모듈명' ) return new BaseObject();
                
                return $this->checkExtraVars($obj);
            }
            
            function triggerUpdateDocumentAfter(&$obj) {
            
                $oModuleModel = getModel('module');
                $module_info = $oModuleModel->getModuleInfoByModuleSrl($obj->module_srl);
                
                if( $module_info->module != '모듈명' ) return new BaseObject();
                
                return $this->updateExtraVars($obj);
            }
    
    
    .. 생략 ..
    
    
    private function checkExtraVars(&$obj) {
                 
                return new BaseObject();
    }
     
    private function updateExtraVars(&$obj) {
                 
                $oDB = DB::getInstance();
                $oDB->begin();
                $sql = sprintf("UPDATE `%sdocuments` SET `tortype`='%s' WHERE `document_srl`=%d", $oDB->prefix, $obj->tortype, $obj->document_srl);
                $result = $oDB->_query($sql);
                if( $oDB->isError() )
                {
                    $oDB->rollback();
                    $oDB_output = $oDB->getError();
                    $oDB_output->setMessage( sprintf('%s %s : %s, %s', $oDB_output->getMessage(), $sql, __FUNCTION__, __LINE__ ) );
                    return $oDB_output;
                    /*$oDB->rollback();
                    $this->stop($oDB->getMessage);*/
                    //return $oDB->getError();
                }
    
    ... 생략 동일한 형태의 4가지  ...
      
                // commit
                $oDB->commit();
                 
                return new BaseObject();
    }

     

    이전 버전에서는 코어 수정없이 잘 작동하다가 RXE 1.9 마지막 버전까지 위 코드들이 동작했던건 위 본문의 document.model.php 에서 뭔가? 정의된 값이 아닐 경우 버리는 것 같아서 getDocument() 의 Extravars 부분을 수정하여 현재까지 아주 잘 작동하고 있습니다. 코어를 손안되고 싶지만 사용중인 위 모듈을 살리려면 어쩔 수가 없이 매번 업데이트시 신경써서 재 수정하고 있습니다.

     

    1.9 마지막 버전 = DB update 되나 불러오지 못합니다. (코어 수정 후 잘 불러와짐)

    2.0 버전 = DB update 되지 않음

    (요행으로 DB update됨)

     

    RXE 2.0 에서도 같은 동작이 처리를 할 수 있었으면 합니다. 마지막 질문이 될 것 같은데요 ^^; 제가 요즘 업무로 인해서 운영사이트를 놓고 있다보니 이제야 답글 요청을 드리게 되었습니다. 필요할때만 이렇게 문의를 드리는 것 같아 송구스럽습니다.

     

    다행스럽게도 RXE 2.0 을 NAS 에서 현재 운영중인 사이트를 복사해서 테스트 중입니다. 아주 잘 작동하고 있습니다.

    저 모듈만 작동하면 12월에는 RXE 2.0 으로 업데이트 하고 싶네요. 감사합니다.

     

    11일 18:25분 추가) $oDB->prefix 를 못가져오네요;; 강제로 'xe_' 넣었습니다. 이제 2.0버전에서도 DB update 는 됩니다.

    증상1) Insert 후 데이터를 불러오지 못합니다. 증상2) 게시물 글쓰기폼에서 값을 다시 지정하고 재등록을 하면 이제 값을 불러 옵니다.

  • profile
    코어를 수정하셨군요.
    코어 업데이트를 조심하셔야 할듯요.