hTemplate – 5.2.조건 변수

조건문

PHP 문서에서 아래와 같은 조건문을 많이 보셨을 것입니다.

 위와 같은 조건문에서 $image_check의 값이 1 또는 true면 괄호 안의 내용을 실행하고, 0 또는 false면 실행하지 않습니다.

hTemplate에서도 아래와 같이 조건변수(스위치문)를 이용하면 같은 기능을 수행하는 템플릿 문서를 작성할 수 있습니다.

  • {IMAGE_CHECK, <img src=”./images/email.gif”> }

또는

  • {?IMAGE_CHECK} <img src=”./images/email.gif”> {/}

조건변수 IMAGE_CHECK 값을 0 또는 false로 할당하면 스위치문 안의 내용은 브라우저에 나타나지 않으며 IMAGE_CHECK 값을 1 또는 true로 할당하면 나타납니다.

  • $tpl->assign(IMAGE_CHECK, 0); // 아무 것도 나타나지 않음
  • $tpl->assign(IMAGE_CHECK, 1); // 이미지 email.gif가 나타남

[주의] {?변수명}경우의수{/} 또는 {?변수명,경우의수}와 같은 구문형식은 1.2.0 버전부터 사용할 수 있습니다. 그 이전 버전에서는 {변수명,경우의수}라고 작성해야 합니다.

스위치문

PHP 문서에서 아래와 같은 스위치문을 많이 보셨을 것입니다.

조건변수(스위치문)를 이용하면 아래와 같이 같은 기능을 수행하는 템플릿 문서를 작성할 수 있습니다.

또는

[주의] {?변수명} 인덱스1 {%항목1%}  인덱스2 {%항목2%} ……{/} 또는 {?변수명, %인덱스1% 항목1 | %인덱스2%/ 항목2 ……}와 같은 구문형식은 1.2.0 버전부터 사용할 수 있습니다. 그 이전 버전에서는 {변수명,%인덱스1% 항목1 | %인덱스2%/ 항목2 ……}라고 작성해야 합니다.

이와같이 조건변수를 이용하면 PHP의 스위치문과 같이 한번의 평가에 의해 여러 개의 case를 동시에 표현하는 것이지요. 여러 개의 문자열(태그가 포함될 수 있음)을 템플릿에 정의해 놓고 상황에 따라 그 중에 하나만 선택하여 브라우저에 나타내려면 각 항목(case)를 구분해주는 구분자가 필요하고 또한 각 항목을 대표하는 인덱스 문자를 구분해주는 구분자가 필요합니다. 이러한 구분자들은 각 버전별로 다소 변화가 있습니다.

< 구분자의 버전별 변화 >
해당 버전 조건변수 구문형식 경우의수 구문형식
항목 구분자 인덱스 구분자
0.0.1p3 ~ 1.1.1 {변수명:반복문:초기값,경우의수} | (수직바) %
1.2.0 {변수명::초기값,경우의수} | (수직바) %
{?변수명;변수옵션;필터명령,경우의수}
{?변수명;변수옵션;필터명령}경우의수{/}
| (수직바) %
{% 과 %} white space

PHP 문서의 인덱스(index)

assign 함수에서 지정할 수 있는 인덱스 문자는 정수, 문자열, true, false입니다. 정수를 지정하면 assign 함수에 의해 문자열로 변환됩니다.

  • $tpl->assign(‘SW_VAR’, 2);

지정된 정수 2는 문자열 ‘2’로 변환되어 해당되는 항목을 선택합니다. boolean형인 true와 false를 지정하면 이 형식을 가지고 항목을 선택합니다.

인덱스 문자를 지정하지 않았을 때

아래와 같이 각 항목에 인덱스 문자가 지정되지 않았을 때는 앞에서부터 1, 2, 3, 4, 5가 자동으로 지정됩니다.

  • {?VAR} 첫번째값 | 두번째값 | 세번째값 | 네번째값 | 다섯번째값 {/}

위의 예제에서 PHP에서 템플릿 변수 {VAR}에 할당되는 값에 따라 어떤 값이 출력되는지 살펴보면 아래와 같습니다.

  • PHP 소스 : $tpl->assign(‘VAR’, 2);
  • 출력항목 : 두번째값
  • PHP 소스 : $tpl->assign(‘VAR’, 4);
  • 출력항목 : 네번째값
  • PHP 소스 : $tpl->assign(‘VAR’, 0);
  • 출력항목 : 없음

문자열 인덱스

인덱스를 지정하지 않으면 앞 항목부터 1, 2, 3, 4, 5 가 자동으로 지정된다고 하였는데 아래와 같이 자동 지정되는 1, 2, 3, 4 … 라는 문자를 다른 순서로 임의 지정한다면 어떻게 될까요?

  • {VAR, %4%첫번째값 | %3%두번째값 | %2%세번째값 | %1%네번째값 | %0%다섯번째값}

이 경우에 템플릿 변수를 할당할 때는 인덱스 키값을 직접 지정하는 경우가 그렇지 않은 경우보다 우선 순위가 높습니다(0.0.3p1부터 적용).

이에 따라 PHP에서 템플릿 변수 {VAR}에 할당되는 값에 따라 어떤 값이 출력되는지 살펴보면 아래와 같습니다.

  • PHP 소스 : $tpl->assign(‘VAR’, 2);
  • 출력 : 세번째값
  • PHP 소스 : $tpl->assign(‘VAR’, 4);
  • 출력 : 첫번째값
  • PHP 소스 : $tpl->assign(‘VAR’, 0);
  • 출력 : 다섯번째값

BOOLEAN 인덱스

각 case를 지정하는 값으로 false 또는 true를 지정하게 되면 마지막에 있는 두가지 경우 중 하나가 선택됩니다. false면 마지막 바로 앞의 경우를 선택하며, true이면 마지막 경우를 선택합니다.

  • $tpl->assign(‘NEW’, false); // new2.gif가 출력됨
  • $tpl->assign(‘NEW’, true); // new3.gif가 출력됨

인덱스 키 ‘default’

조건에 맞는 항목이 없을 때는 아무런 값도 출력하지 않습니다. 그러나 1.2.0 버전부터는 PHP의 스위치문에서처럼 예약어 ‘default’ 라는 인덱스 키로 지정된 항목을 작성하면 조건에 맞는 항목이 없을 때 default로 지정된 항목을 출력할 수 있습니다.

  • {?VAR} 첫번째값 | 두번째값 | 세번째값 | 네번째값 | %default% 기본값 {/}

위의 예제의 경우에 PHP에서 템플릿 변수 VAR에 0과 같은 1, 2, 3, 4 이외의 값을 할당한다면default로 지정된 항목 “기본값”이 출력됩니다.

인덱싱(indexing)

이전 버전에서 각 항목을 인덱싱하는 방법을 보면 좀 혼란스러운 것 같아 1.2.0 버전에서는 이를 단순화하였습니다. assign() 함수에서 지정된 인텍스 문자를 가지고 다음과 같은 조건에 의해 해당 항목을 선택합니다.

  • 지정된 인덱스 문자가 문자열이면 각 항목에 기록된 인덱스와 비교하여 일치하는 항목을 되돌려 줍니다.
  • 지정된 인덱스 문자가 boolean형인 true면 가장 뒤에 있는 항목을 되돌려 줍니다.
  • 지정된 인덱스 문자가 boolean형인 false면 뒤에서 두번째 있는 항목을 되돌려 줍니다.
  • 위의 조건에 해당되는 것이 없을 때 인덱스 중에 ‘default’가 존재하면 이 항목을 되돌려 줍니다.
  • 위의 조건에 해당되는 것이 없으면 아무 값도 되돌려주지 않습니다.

중첩 switch문

1.0.0 버전부터는 switch문 내에 switch문을 제한없이 중첩할 수 있도록 개선하였습니다. 아래는 중첩 switch문을 이용한 템플릿 파일 예제입니다.

조건변수(스위치문)를 중첩되게 사용할 경우에 한 문장내에서는 여러가지 구문형식 중에 동일한 구문형식으로 작성하여야 하며 혼용하여 사용할 수 없습니다. 혼용하더라도 현재 버전에서는 정상적으로 동작하나 향후 상위버전과의 호환성을 보장할 수 없습니다.

각 항목의 앞 뒤에 공백붙이기

1.0.0 버전부터 각 항목의 앞뒤에 있는 공백이 모두 삭제됩니다. 만약에 각 항목의 앞뒤에 공백을 넣으려면 어떻게 할까요? 아래의 예와 같이 공백 앞에 역슬래시(\)를 붙여서 escape 시키면 됩니다.

역슬래시(\)를 붙여서 escape 시키는 대신에 아래와 같이 코드를 이용하셔도 됩니다.

동일한 스위치 변수명으로 다른 조건 선택하기

동일한 변수값을 가지고 여러개의 다른 조건을 선택할 수 있습니다.

  • {SW_VALUE, a | b | c}
  • {SW_VALUE, A | B | C}

위의 예와 같이 템플릿 파일 내에 동일한 템플릿 변수 {SW_VALUE}에 대하여 그 조건문이 다르게 나타낼 수 있습니다. 이 때 {SW_VALUE}의 값이 2라면 {SW_VALUE, a | b | c}의 결과값은 ‘b’이고 {SW_VALUE, A | B | C}의 결과값은 ‘B’입니다. 위의 예에 있는 템플릿 파일을 컴파일하면 템플릿변수 구조는 대략 아래와 같이 변환됩니다. 여기서 변수 구조와 인덱스값은 템플릿 버전 및 템플릿 파일에 포함된 템플릿 변수의 위치에 따라 변경될 수 있습니다.

답글 남기기