라이믹스 document.model.php setToAllDocumentExtraVars 조언을 얻고 싶습니다.
CMS/프레임워크 | Rhymix 1.9 |
---|---|
개발 언어 | PHP 7.4 |
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
// 18.06.29 추가 시작
$GLOBALS['XE_DOCUMENT_LIST'][$document_srl] = $oDocument;
if($load_extra_vars) $this->setToAllDocumentExtraVars();
// end
라이믹스 2.0 에서는 이 마저도 소용이 없어졌네요.
코어를 수정하더라도 사용할 방법이 있을까요?
댓글 5
무엇을 어떻게 업데이트하려고 시도하고 계시고, 무엇이 안 된다는 것인지 좀더 자세히 설명해 주시면 도움이 되겠습니다. setToAllDocumentExtraVars를 사용하는 것 자체가 목적이라기보다는, 뭔가가 안 되어서 땜빵을 위해 그 함수를 사용하고 계셨는데 그 땜빵이 더이상 안 통해서 다른 방법을 찾고 있다는 말씀으로 읽히거든요. 애당초 무엇이 문제인지 알아야 그걸 어떻게 땜빵하는 게 맞는지 조언을 해드릴 수 있습니다.
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 시에는 반영이..
직접 작성한 쿼리를 사용하여 DB에 확장변수를 입력한 후, getDocument를 사용하여 그 문서를 다시 불러오면 확장변수가 안 보인다는 것인가요? DB에는 정상적으로 입력되어 있고요? 아니면 쿼리 자체가 작동을 안 해서 애초에 DB에 입력조차 안 된다는 것인가요?
만약 DB에는 정상적으로 입력되는데 getDocument를 했을 때 안 보인다면 캐시 문제일 가능성이 있고, 그렇다면 코어에서 좀더 적극적으로 캐시를 갱신하는 등의 방법으로 어느 정도 커버해 드릴 수 있을지도 모릅니다. 단, 글을 쓰는 도중에 (코어의 insertDocument 실행이 아직 끝나지도 않은 상태에서) 트리거 등을 사용하여 그 글을 다시 불러오려고 한다면 해결하기 어려울 수도 있습니다.
모듈명.class.php
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
$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) 게시물 글쓰기폼에서 값을 다시 지정하고 재등록을 하면 이제 값을 불러 옵니다.
코어 업데이트를 조심하셔야 할듯요.