XE Tips 는 제가 XE 공홈에 쓴 XE 관련 유용한 팁들입니다. 기능개선은 공홈에 안 적어둔 XE 유용 개선팁들입니다.
유용정보는 외부 검색을 통해 알아낸 소스등을 기재해둔 곳입니다.
버그 신고내역들은 XE 사용하다가 발견한 버그 패치방법들로, Core Issue 에 기록해뒀기에 XE 에 적용이 되었을 가능성이 있겠죠
제가 쓴 글들에 대해 퍼가실때는 꼭 출처를남겨주시고.. (다만 플래시뷰 기반이기에 퍼가기는조금 힘들 수 있겠죠 ^^;)
타회원의 글들도 적혀있는 출처를 같이 꼭 기재해주세요
출처 | sejin7940 |
---|
사용자정의를 사용하면서 첨부파일이 등록된 글에서..
해당 글을 수정 버튼을 누른 후 첨부파일을 삭제한 후..
이 때 저장을 누르면 사용자정의값이 그대로 유지되지만..
저장을 누르지 않고 뒤로 돌아가거나 목록을 누른 경우..
해당 글의 첨부파일은 삭제되어있지만, 사용자정의값들도 전부 다 사라져버린다.
물론 대부분은 파일 삭제 후 글을 재저장할테니 문제가 없을 수도 있지만
글 수정에서 파일삭제 후 저장하지 않은 경우나,
관리자페이지-> 파일 관리에서 파일을 지우는 경우라든지
다른 모듈 기반에서, deleteFile 함수를 직접적으로 이용할 경우
해당글의 사용자정의가 무조건 삭제되어버린다
원인은...
$oFileController->deleteFile($val->file_srl); 가 실행되서 기존폴더의 파일을 삭제하게 되는데..
file.controller.php 에서 deleteFile 함수 끝부분에 보면 $oDocumentController->updateUploaedCount 함수 실행된다.
(사실 글이동시에는 논리적으로는 이 부분이 실행될 필요가 없다.)
어쨋든 updateUploaedCount 함수 실행되면서, 그 내부의 updateDocument 가 실행된다.
그런데 이 updateDocument 내부에서는
확장변수가 있는 구조라면, 무조건 확장변수 전체를 지우고, $obj->extra_vars1 같은 형태로 확장변수 값을 받아서 다시 저장된다.
글 수정시에는 확장변수 값이 전부 전달이 되기에 $obj->extra_vars1 형태에서는 문제가 없는데..
파일삭제를 통할 경우에는, updateDocument($oldDocument, $newDocumentObject); 형태로
$newDocumentObject 값이 전달되는데 이 값은 DB 칼럼 값을 기반으로 넘기는데,
extra_vars1 등은 칼럼의 변수 값들이 아니여서 (예전 1.4 때에서는 변수였지만. 1.7 에서는 별도 DB를 쓰기에)
결국 빈 값이 전달된다.
따라서 이를 해결하기 위해서는
updateUploadedCount 함수에서, 사용자정의값을 미리 구해서 $newDocumentObject 에 값을 넣어 직접 전달을 해야만한다
수정방법은
document.controller.php 에서
function updateUploaedCount 함수에서
$newDocumentObject = (object) $newDocumentArray;
아래에다가 추가
$output = $oDocumentModel->getDocumentExtraVarsFromDB(array($documentSrl));
if($output->toBool() && $output->data)
{
foreach($output->data as $key => $val)
{
if(!isset($val->value)) continue;
$newDocumentObject->{'extra_vars'.$val->var_idx} = trim($val->value);
}
}