문서가 가지는 extra_vars 컬럼의 값을 게시글 수정시 사라지게 만든 이유가 뭔가요?
CMS/프레임워크 | Rhymix 2.0 |
---|---|
개발 언어 | 사용안함 |
문서가 정보를 가질 수 있는 입력값 중에 extra_vars 라는 컬럼이 있습니다.
예전에 여기에 해당 문서의 특정한 고유의 변경되는 값을 해당 이벤트가 일어날때 저장되도록 해서 그 값을 이용하게 구현한 적이 있습니다. 애드온으로 구현했었는데요.
이때 구현하면 한가지 이상한 점이 있있습니다.
애드온에 의해 특정 이벤트에 해당 이벤트 기록을 저기에 저장을 했는데 해당 게시글을 수정하게 되면 해당 값이 사라져 버리는 문제점이 발견되었습니다.
그래서 해당 애드온에 procBoardInsertDocument_before 시점에서
해당 값을 쿼리해 온 후
Context::set('extra_vars', $exvars, true);
로 문서 저장 직전에 해당 값도 함께 가지도록 애드온에서 구현하여 불러온 값이 다시 저정되도록 했습니다.
저 값이 글을 수정하면 날아가게 만든 이유는 뭘까요???
댓글 27
1) 예전에 확장변수에 들어가던 값들은 모두 별도의 테이블로 빠져버렸고
2) 애드온으로 추가하셨던 확장변수는 글 수정 화면에서 다시 제출하지 않았을 테니
남은 것이 없어서 그냥 빈 값으로 업데이트되는 것 아닐까요?
별도의 테이블로 빠졌다는게 어디로 빠진거죠??
또 한가지 추가로 이상한점이 발견된게 라이믹스 2.0 으로 업데이트 한 곳에서는 애든에서 저곳으로 값이 입력이 안되네요. 왜 안되는지 디버그를 해봐야겠습니다.
document_extra_vars 라는 테이블안에 있습니다.
해당 부분에 document_srl 에 따라 값들을 여러개 저장하고 있습니다.
ex) 확장변수가 2가지 이상을 입력햇을때
1234 key_name1 value1
1234 key_name2 value2
순서에 따라 document_srl, 확장변수로 지정한 키값이름, 실제저장데이터
간단한 예시로 보여드린것이라 빠진 내용이 있을 수 있지만 대부분 이렇게 저장합니다.
https://github.com/rhymix/rhymix/blob/master/modules/document/schemas/document_extra_vars.xml
https://github.com/rhymix/rhymix/blob/master/modules/document/schemas/document_extra_keys.xml
두가지 칼럼 참고하세용
문서가 가지는 컬럼 extra_vars 를 말씀 드린겁니다.
라고 질문주셔서 그 답변을 드린 것 입니다.
따라서 해당 extra_vars에 들어가는 값을 빈값으로 저장할 수 있다는 뜻입니다..
1. 우선 obj->extra_vars 으로 넘어온 값이 string이 아니라면 값을 serialize 하여 저장하도록 되어있습니다 (8년전부터)
https://github.com/rhymix/rhymix/blame/master/modules/document/document.controller.php#L790
이는 최근 rhymix master 버전까지 변화된점은 없어보이는데, 수정시 애드온에서 처리하는 항목에 $exvars <-변수에 넣은 값이 정확히 어떻게 추가된것인지 확인이 필요할 것 같은데요.
그리고 실제로 documents 테이블의 extra_vars 칼럼에 넣는 방식보다는 이제는 테이블이 분리되어 운영되기때문에 실제로 extra_vars_key테이블과 value 테이블을 모두 이용하여 만드는 것이 정석입니다.(애초에 라이믹스가 탄생하기전 xetown이 탄생하기전부터 그렇게 동작하도록 되어있었던거죠 ㅎㅎ)
저는 사용자정의를 사용한다고 한적이 없습니다. 그리고 해당 필드에 serialize 로 저장하도록 하고 있구요.
관련이 있으니 같이 설명을 드린 것 이예요. 너무 단정지어서 생각하시지 마시고 제가 답변드린 이유도 생각해주셨으면 좋겠습니다..ㅠㅠ
extra_vars를 현재 상황에서 아래 yjsoft님께서 말씀하신 것과 같이 막 쓰는 존재가 이제는 아니거든요. 그리고, 윗질문에서 기진님의 답변에 물음에 제가 extra_vars가 어디 테이블로 빠졌는지에 대한 답변을 드렸던 것이고요..ㅠㅠ
1. 해당 칼럼은 과거 버전의 XE에서 확장변수 저장을 위해 사용했었습니다.
2. 현 버전의 XE나 라이믹스는 확장변수를 extra_vars1, extra_vars2 형태로 전송합니다.
3. 하지만 XE나 라이믹스 모두 extra_vars 설정 부분은 그대로 남아 있습니다.
4. 글 작성시 extra_vars라는 값은 없으므로 serialize 과정에서 N;만 남습니다.
5. 따라서 글을 수정하면 기존 값은 지워지고 N;만 남습니다.
지금처럼 글 수정시에 이미 저장된 값을 불러와서 글 수정 저장시 다시 저장되도록 하는게 최선이겠네요.
수정 페이지에서 extra_vars 칼럼값을 불러오지 않는게 아닐까요? 수정페이지에 해당 값을 불러오지 않으니 공란으로 되어 있고 그 공란 값에서 수정 완료하니 그 공란 값으로 extra_vars 칼럼 값을 업데이트 하는...^^;;
말씀하신 애드온이 특정 변수의 변수값 변경시 작동해서 extra_vars 를 다룬다는 것이죠?
procBoardInsertDocument 함수는 extra_vars 컬럼을 따로 저장하거나 하지 않고 있구요.
extra_vars에 저장된 값이 글 수정시 날아가게 만는 이유는
다른 분들 말씀처럼 확장변수 기능이 다른 테이블로 대체되면서 extra_vars 컬럼이 방치되었던 것 같구요.
그 바람에 procBoardInsertDocument 함수에서 insertDocument나 updateDocument로 object를 전달할 때 extra_vars 컬럼의 데이터를 누락하고 있는 것 같습니다.
어차피 board 모듈에서 확장변수는 별도 테이블로 처리한다는 방침인 것 같으니...
언급하신 애드온이 특정 변수의 변수값 변경시에 extra_vars 컬럼을 다룬다고 이해했는데요.
일단 현재 글 수정시 해당 항목은 누락이 된다고 하니 제가 지금 애드온에서 문서 인서트 직전(수정인지 확인은 합니다. 수정시에먄...) 해당 컬럼의 값을 가져와서 누락되지 않도록 하고 있으니 이점 기억하고 있으면 될 것 같습니다.
다른 필요가 있다면 이슈로 등록하던지 해보겠습니다.
다시 말씀드리자면 extra_vars 컬럼은 과거에 (대략 10년 전?) 확장변수를 저장하는 데 사용했던 컬럼입니다. 그래서 계속 확장변수 얘기가 나오는 것입니다. 아무튼 현재 XE, 라이믹스 코어에서는 해당 컬럼을 사용하지 않고 있으며, 단지 빈 값이 들어오면 빈 값이 저장될 뿐입니다.
사실 언제 삭제되더라도 이상하지 않은 컬럼이니, 그 컬럼에 데이터를 저장하는 애드온은 원칙적으로 모두 잘못하고 있는 것입니다. (대표적으로 모바일 작성글 표시 애드온이 그런 억지를 부리는 것으로 알고 있습니다.) 그러나 현실적으로 오래된 애드온을 고치기 쉽지 않으므로, 차라리 extra_vars 컬럼의 값을 최대한 보존할 수 있도록 코어 차원에서 배려하는 편이 나을지도 모르겠습니다.
개인적으로는 별도 테이블을 만들지 않으면서(기술적 혹은 환경적 이유로) 문서와 매칭 시킬 수 있는 여유의 메모 공간이 있다는 것에는 만족 스러운 남겨진 필드라고 생각합니다.
실제로 이를 보완하여 활용하고 있는 사례가 많다면 제대로 활용할 수 있도록 정식으로 지원을 해야겠고, 그렇지 않다면 확실하게 정리를 해야겠지요. 지금은 컬럼이 있기는 한데 수시로 데이터가 날아가는 흠좀무한 상황이니까요. 이쪽이든 저쪽이든 결정이 필요하겠습니다.
간단한 기능을 모듈로 만들어 테이블까지 생성하는 것 보다 애드온으로 값만 저장해두는 것이 편리할때가 있습니다.
현재 코어 구조상 extra_vars컬럼을 활용하려면 입력한 쪽에서 본인 데이터가 유지되도록 코드를 작성해야 합니다.
저는 그렇게 하고 있고 회원테이블 extra_vars과 같은 방식이기에 다른 분들도 같은 규칙으로 처리하고 계신다고 생각합니다.
게시물 수정시 extra_vars 값이 사라지는 것은 extra_vars 값만 그런것이 아니고
확장변수, 카테고리 등 스킨에서 수정시에 값을 넘겨주지 않으면 다 사라지는 것으로 알고 있습니다.
그래서 표시하지 않고 싶으면 hidden으로라도 넘겨주어야 합니다.
코어에서 기존값을 유지해주는 것도 나쁘진 않아보이나 기존자료들에 영향이 없는지 확인이 필요하겠습니다.
저는 무척 많이 이용하고 있습니다. 사라진다면 저희는 타격이 너무 심할 것 같습니다.
플래너XE123에서는 문서 테이블에 있는 extra_vars 필드에 일정의 상태 값을 저장해놓고, 이에따라 일정을 구분하여 출력 해주는 용도로 활용하고 있습니다. (예: 관리자 승인 여부, 일정취소, 일정완료등...)
문서테이블의 extra_vars 필드는 시스템에 큰 영향을 주지않으면서 사용자가 활용할 수 있는 필드 같으니...
앞으로도 계속 사용이 가능하면 좋겠습니다.
감사합니다.
ksc
안녕하세요,
XE Ver 1.7.4 부터인가(??) extra_vars 필드에 값이 있으면 serialize 하지 않고 그대로 두는것 같습니다.
플래너XE123에서는 문서 수정시 $oDocument->get('extra_vars') 로 데이터를 불러온 후, 그 값 또는 수정될 값을 셀렉트 박스 값으로 다시 넘겨주는 방법으로 처리하고 있습니다. (결국 재입력 비슷 합니다.)
감사합니다.
ksc