hTemplate – 7.2.내용 형식

변수옵션 ctype을 이용하면 변수에 들어갈 내용의 형식을 지정할 수 있습니다.

내용형식의 종류

템플릿 변수의 내용형식은 1.2.0 버전부터 지정할 수 있으며, 지정할 수 있는 내용형식(contents type)은 “템플릿문서”, “텍스트문서”, “PHP문서” 3가지 종류로 변수옵션 “ctype”을 이용하여 아래와 같이 지정합니다.

  • 템플릿문서일 때 {#변수명}파일명{/}
  • 텍스트문서일 때 {#변수명;ctype=text}파일명{/}
  • PHP 문서일 때 {#변수명;ctype=php}파일명{/}

템플릿문서일 때는 ctype을 지정하지 않으며, 지정하지 않았을 때는 템플릿문서로 인식하여 처리합니다.

파일변수뿐만 아니라 다른 모든 변수에도 ctype을 지정할 수 있도록 했습니다. 각 변수마다 ctype기능이 동작하는 방식에 약간의 차이가 존재하며, 각 ctype에 따른 동작은 컴파일할 때 이루어집니다.

변수내용(파일변수인 경우에는 파일내용) 형식이 text인 경우에는 문장 내에 템플릿변수가 있더라도 템플릿변수로 처리하지 않고 템플릿 문서가 아닌 일반 문서처럼 인식합니다.

템플릿변수의 내용형식이 php일 경우에 주의할 점

변수내용(파일변수인 경우에는 파일내용) 형식이 php인 경우에는 아래와 같은 절차에 따라 그 내용이 처리된다.

  1. 파일변수인 경우에는 파일내용을 읽어 변수내용에 저장함
  2. 변수내용에 존재하는 템플릿변수를 처리함
  3. 변수내용을 php 스크립트로 인식하여 처리하며 그 결과를 돌려받아 변수내용에 저장함
  4. 이후는 ctype이 text인 경우와 처리방법이 동일함

변수내용(파일변수인 경우에는 파일내용)은 완전한 php 스크립트 문장입니다. 일반 php 스크립트와의 차이점은 아래와 같이 문장 내에 템플릿변수가  존재할 수 있다는 것입니다.

조건변수(스위치문)에서는 경우의 수를 분리하기 전에 위에서 기술한 4단계 절차에 따라 먼저 변수내용을 처리한 후 이 결과값을 가지고 경우의 수를 분리하여 처리합니다.

지정된 php 문서의 시작과 끝에는 반드시 php 시작태그 <?php와 종료태그 ?>가 있어야 합니다.

템플릿문서를 {#;ctype=php}./test.php{/}라고 작성하였다면 php 문서 파일 test.php에는 아래와 같이 문서 시작과 끝부분에 시작태그와 종료태그를 반드시 지정하여야 합니다.

{#; ctype=php}./test.php{/}의 결과는 php 문서의 반환값 ‘test.php’입니다. 만약 php 문서 내에 print, echo와 같은 함수를 이용하여 브라우저로 전송하는 문자가 발생하면 반환값 대신에 print, echo로 출력한 값이 {#;ctype=php}./test.php{/} 위치에 들어가게 됩니다.

php 문서를 실행 중에 에러가 발생한 경우에도 print, echo로 출력한 것과 같이 발생한 에러메시지를 돌려받게 됩니다.

블록변수의 내용을 php 내용형식으로 지정한 예를 들어보면 아래와 같습니다.

위의 블록변수의 위치에는 print 함수로 출력한 ‘블록변수에 직접 php 문서를 삽입한 경우’가 들어갑니다.

GET 방식에 의해 php 문서로 변수 전달

파일변수의 내용형식이 php일 때 GET 방식에 의해 php 문서로 변수를 전달할 수 있습니다. 아래와 같이 php 문서 test.php 내에 GET 방식으로 전달받는 변수 $version이 있다고 가정하겠습니다.

위 문서는 php.ini 파일의 옵션 register_globals이 on(또는 1)으로 설정되었을 때에만 정상적으로 $version의 값을 돌려받을 수 있습니다. 만약 register_globals이 off(또는 0)로 설정되어 있다면 $version 대신에 $_GET[‘version’]라고 기술해야 합니다.

이와 같은 php 문서의 GET 변수 $varsion의 값을 아래와 같이 템플릿문서 파일변수의 파일명에 GET 방식으로 전달할 수 있습니다.

참고로 내용형식이 php인 php 문서들은 템플릿툴 내에서는 하나의 함수로 처리됩니다. 이 때 강제로 지정되는 함수명은 hTemplateFunction_템플릿명()입니다. 위의 예에서 파일변수명이 SAMPLE이므로 이 파일변수에 해당하는 템플릿명은 변수명과 같은 SAMPLE입니다. php.ini 환경설정파일의 옵션 register_global의 값이 on으로 설정되었을 때 위 예제의 php 문서는 아래와 같이 함수명 hTemplateFunction_SAMPLE로 정의한 것과 같은 효과가 있습니다.

템플릿을 디버깅하거나 에러가 발생할 때 위와 같은 hTemplateFunction_템플릿명으로 된 함수명이 나올 수 있으니 참조바랍니다.

또한 이 기능에 의하여 미리정의된 템플릿변수 {_GET.변수명}으로도 자동 처리됩니다.

답글 남기기