사용자정의(확장변수) 단일/다중선택 형식의 기본값에 다국어 적용
안녕하세요, 오랜만에 글 남깁니다.
그동안 게시판 사용자정의(일명 확장변수)에서 단일/다중선택 형식(셀렉트 메뉴, 체트박스, 라디오버튼 등)을 사용할 때 기본값에 다국어 적용이 안 돼서 애를 먹었었는데요.
저뿐만 아니라 적지 않은 분들이 불편함을 토로했던 것으로 기억하고 있습니다.
그 바람에 저 역시 이런저런 뻘짓을 한 적이 있었죠.
https://xetown.com/old/354803
https://xetown.com/tips/359530
(지나고 보니 흑역사ㅠ)
그런데 드디어 단초를 찾은 것 같습니다.
코어(XE 1.11.1 기준)에서 파일 두 개를 찾아 총 3회 정도 수정해봤습니다.
1. 문서 작성시의 사용자정의 입력폼 (classes/extravar/Extravar.class.php) 수정
362행의 $default = $this->_getTypeValue($this->type, $this->default); 대신 아래 코드 삽입
$oModuleController->replaceDefinedLangCode($this->default);
$default = $this->_getTypeValue($this->type, htmlspecialchars($this->default, ENT_COMPAT | ENT_HTML401, 'UTF-8', false));
=> 이렇게 하면 문서 작성시 사용자정의의 기본값이 다국어로 출력됩니다.
2. 사용자정의 관리 페이지 (modules/document/tpl/extra_keys.html) 수정
54행의 <input type="text" name="default" id="default" value="{$selected_var->default}" placeholder="Ex) Red, Green, Blue" /> 를 아래 코드로 대체
[추가] 61행의 <input type="text" name="desc" id="desc" value="{$selected_var->desc}" class="lang_code" placeholder="Ex) Displayed as your choice." /> 를 아래 코드로 대체
=> 이렇게 하면 사용자정의 설정시 기본값에 다국어 입력이 가능해집니다.
3. 끝으로, 문서 수정시의 사용자정의 입력폼 (classes/extravar/Extravar.class.php) 수정
238행에 다음과 같이 코드를 삽입
$value = htmlspecialchars($value, ENT_COMPAT | ENT_HTML401, 'UTF-8', false);
if(is_array($value))
{
...
=> 이렇게 하면 기존 선택값이 문서 수정시에도 반영되는 것 같습니다.
...
음, 아직 완벽한 팁은 아닌 것 같은데요.
예컨대 한국어 모드로 작성한 문서를 영어 모드에서 최초 수정할 경우(즉, 다국어 문서를 만드는 경우겠죠), 기존값이 체크가 안 되더라구요.
어쨌든 단초는 찾은 것 같습니다ㅎㅎ

댓글 7
혹시 가능하시다면 직접 적용해보시고 어떻게 잘 되는지도 알려주시면 좋겠어요!
다른 언어로 넘어갈 때 그러는 거 맞죠?
동일 언어에서는 괜찮구요.