모듈/애드온에서 확장변수를 수정할 수 있는 가장 좋은 방법이 있을까요?
CMS/프레임워크 | Rhymix 2.1 |
---|---|
개발 언어 | PHP 8.4 |
특정 확장변수를 게시물 읽을때 숨기거나 값을 변경하려는 목적으로 모듈을 개발하려고 했습니다.
근데 확장변수와 관련한 소스를 뒤져보니 $GLOBALS에 저장해서 약간 캐싱?하는 형태로 처리하는듯 보이더라구요.
그래서 문서 하나에만 특정 값을 수정하려고해도 다른 조건에도 영향을 끼치는 등 예기치 못한 영향이 있는듯 보여서 주저하게 되는 상황입니다.
확장변수를 많이 쓰는 상황이다보니 결국에는 어떻게 스킨단으로 처리하다가 더이상 안되겠다 싶은 상황인데,
관련하여 좋은 방법이 있을지 알고싶습니다.
에카
Lv. 2
댓글 6
글읽기 화면에서만 임시로 변경하려면
$oDocument->getExtraVars()로 일단 확장변수를 모두 불러온 후,
원하는 확장변수를 찾아서 value를 조작하면 해당 페이지 처리 중에는 변경한 내용이 유지됩니다.
물론 DB에 저장된 값은 그대로이고요.
오브젝트는 레퍼런스로 넘어오기 때문에, $GLOBALS에 캐싱된 값도 함께 변경된다는 점을 이용합니다.
DB에 저장된 값을 영구적으로 변경하려면
DocumentController::updateDocumentExtraVar($module_srl, $document_srl, '확장변수이름', '변경할 값');
단, 해당 페이지 처리 중에는 캐시 때문에 변경사항이 반영되지 않은 것처럼 보일 수 있습니다.
이런 작업은 보통 POST 요청에서 하게 되는데, 다음 화면을 GET 하면 그 때는 반영된 상태로 나옵니다.
위의 두 가지 방법을 함께 사용하면
DB에서도 변경하고, 해당 페이지 처리 중에도 즉시 반영되도록 할 수 있습니다.
목록에 영향을 끼치지 않고 게시물 읽기에서만 값을 수정하려면 스킨단에서 쓸 확장변수용 복사된 변수를 별도로 지정해주는게 맞겠죠?
점점 사이트 덩치가 커지니 커스텀하면서 골치아픈것들이 많네요 ㅠㅠ
변수를 복사해도 오브젝트이기 때문에 레퍼런스가 따라다닙니다. 그렇다고 레퍼런스를 끊으면 의미가 없고요. 글읽기 화면에서만 값을 수정하려면 글읽기 화면에서만 인클루드하는 스킨에서 처리해야겠지요.
음, 하단목록에 영향을 주는 것마저 막고 싶으시다면 레퍼런스를 끊고 복사하는 수밖에 없겠네요. 스킨에서 확장변수 출력하는 부분 맨 위에서 $oDocument->getExtraVars() 뭐 이런 코드가 있을 텐데, 그게 확장변수 목록입니다. 그걸 가져와서 루프를 돌리도록 되어 있죠. 그 목록 중 필요한 항목을 clone해서 레퍼런스 끊고 조작한 후 제자리에 감쪽같이 끼워넣으시면... ㅡ.ㅡ
그런데 그렇게까지 할 거라면 차라리 확장변수 출력하는 부분에서 기존 확장변수의 값을 무시하고 그냥 내가 원하는 내용을 출력하면 그만 아닌가요? DB에 저장할 것도 아니니...
DB불러오기라던가, 너무 처리해야할 조건이 많아서요.
스킨에다가 기능 하드코딩하고싶지 않은 일종의 고집때문인데, 이 고집이 발목을 잡고있네요.
최대한 안무거워지게 노력해봐야겠습니다.
처리는 별도의 php 파일이나 모듈 클래스에서 하고,
바꿔치기만 스킨에서 하면 어떨까요? ㅎㅎ
말씀해주신대로 진행해봐야겠습니다 ㅠㅠ 감사합니다!