팁/튜토리얼

사용자정의(확장변수) 단일/다중선택 형식의 기본값에 다국어 적용

2018.12.16 16:56
829
2

안녕하세요, 오랜만에 글 남깁니다.

 

그동안 게시판 사용자정의(일명 확장변수)에서 단일/다중선택 형식(셀렉트 메뉴, 체트박스, 라디오버튼 등)을 사용할 때 기본값에 다국어 적용이 안 돼서 애를 먹었었는데요.

저뿐만 아니라 적지 않은 분들이 불편함을 토로했던 것으로 기억하고 있습니다.

 

그 바람에 저 역시 이런저런 뻘짓을 한 적이 있었죠.

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 = getController('module');
$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" /> 를 아래 코드로 대체

<input type="text" name="default" id="default" value="<!--@if(strpos($selected_var->default, '$user_lang->') === false)-->{$selected_var->default}<!--@else-->{htmlspecialchars($selected_var->default, ENT_COMPAT | ENT_HTML401, 'UTF-8', false)}<!--@end-->" class="lang_code" 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." /> 를 아래 코드로 대체

<input type="text" name="desc" id="desc" value="<!--@if(strpos($selected_var->desc, '$user_lang->') === false)-->{$selected_var->desc}<!--@else-->{htmlspecialchars($selected_var->desc, ENT_COMPAT | ENT_HTML401, 'UTF-8', false)}<!--@end-->" class="lang_code" placeholder="Ex) Displayed as your choice." />

 

=> 이렇게 하면 사용자정의 설정시 기본값에 다국어 입력이 가능해집니다.

 

 

3. 끝으로, 문서 수정시의 사용자정의 입력폼 (classes/extravar/Extravar.class.php) 수정

 

238행에 다음과 같이 코드를 삽입

case 'select' :
    $value = htmlspecialchars($value, ENT_COMPAT | ENT_HTML401, 'UTF-8', false);
    if(is_array($value))
    {
        ...

 

=> 이렇게 하면 기존 선택값이 문서 수정시에도 반영되는 것 같습니다.

 

...

 

음, 아직 완벽한 팁은 아닌 것 같은데요.

예컨대 한국어 모드로 작성한 문서를 영어 모드에서 최초 수정할 경우(즉, 다국어 문서를 만드는 경우겠죠), 기존값이 체크가 안 되더라구요.

어쨌든 단초는 찾은 것 같습니다ㅎㅎ

윤삼 Lv. 19
아무래도 중급 초반 수준의 코딩 오타쿠인 것 같습니다.

댓글 7