XE Tips 는 제가 XE 공홈에 쓴 XE 관련 유용한 팁들입니다. 기능개선은 공홈에 안 적어둔 XE 유용 개선팁들입니다.
유용정보는 외부 검색을 통해 알아낸 소스등을 기재해둔 곳입니다.
버그 신고내역들은 XE 사용하다가 발견한 버그 패치방법들로, Core Issue 에 기록해뒀기에 XE 에 적용이 되었을 가능성이 있겠죠
제가 쓴 글들에 대해 퍼가실때는 꼭 출처를남겨주시고.. (다만 플래시뷰 기반이기에 퍼가기는조금 힘들 수 있겠죠 ^^;)
타회원의 글들도 적혀있는 출처를 같이 꼭 기재해주세요
출처 | sejin7940 |
---|
증상 :
등록된 게시물 수정 화면에서 기존에 첨부된 파일을 하나 이상 삭제하고 저장하지 않고
새로고침하거나 다른 페이지로 이동하면 xe_document_extra_vars 테이블의 해당 문서와 연결된 모든 데이터가 삭제됩니다.
원인 :
updateUploaedCount 에서 updateDocument 함수로 넘어가는데
이 때 $obj->{'extra_vars'.$idx} 값들이 안 넘어갑니다
앞선 updateUploaedCount 에서, $oldDocument->variables 에서 확장변수 값이 제대로 안 넘어가기 때문이죠
궁금한 점 :
단순히 파일을 삭제한건데.. 왜 굳이 updateDocument 함수로 넘어가게 했을까요?
이렇게 넘어가면 불필요하게 확장변수를 다 삭제하고 다시 저장하는 걸 비롯해 글자체의 update 과정을 전부 다시 거치게 되는데
last_update (최종 수정일) 을 갱신하기 위해서인가요?
트리거의 연결이라고 보기도 그렇고, 실제로도 꽤 비효율적인듯한데..
해결방법이 updateDocument 형태를 따를건지에 따라 조정될듯합니다.
해결방법 #1 과 해결방법 #2 를 모두 기재해두니
XE 개발진에서 검토해보시고 둘 중 하나의 형태로 수정하면 될듯합니다.
해결방법 #1 :
기존의 updateDocument 형태를 그대로 따르는 경우
document/document.controller.php 에서 updateDocument 함수에서
// Remove all extra variables
바로 위에 아래문구 추가
if(Context::get('act')!='procFileDelete') {
// Update the category if the category_srl exists.
바로 위에 } 를 추가
해결방법 #2 :
updateDocument 로 가지 않고 그냥 바로 query 를 통해 uploaded_count 를 차감하는 방법
1) document/document.controller.php 에서
updateUploaedCount 를 통째로 교체
public function updateUploaedCount($documentSrlList)
{
$oDocumentModel = getModel('document');
$oFileModel = getModel('file');
if(is_array($documentSrlList))
{
$documentSrlList = array_unique($documentSrlList);
foreach($documentSrlList AS $key=>$documentSrl)
{
$fileCount = $oFileModel->getFilesCount($documentSrl);
$args->document_srl = $documentSrl;
$args->uploaded_count = $fileCount;
$output = executeQuery('document.updateUploadedCount', $args);
}
}
}
2) document/queries/updateUploadedCount.xml 추가
<query id="updateUploadedCount" action="update">
<tables>
<table name="documents" />
</tables>
<columns>
<column name="uploaded_count" var="uploaded_count" />
</columns>
<conditions>
<condition operation="equal" column="document_srl" var="document_srl" filter="number" notnull="notnull" />
</conditions>
</query>