3. Template Handler

Views 1458 Votes 0 2011.01.17 12:27:32
SMaker *.22.160.57

Template Handler

http://doc.xpressengine.com/classTemplateHandler.html - class 구조

XE는 몇 가지 특별한 기능을 사용하기 위해서 자체 Template 엔진을 이용합니다.
smarty등의 템플릿 엔진처럼 정해진 문법으로 작성된 템플릿 파일을 PHP 파일로 컴파일 후에 include만 하기 때문에 효율적으로 동작하게 됩니다.

  • 클래스 파일 위치 : ./classes/template/TemplateHandler.class.php
  • 동작방법

    • 인자로 넘겨받은 template_path, template_filename을 이용하여 템플릿 파일을 찾음
    • 해당 템플릿 파일이 있다고 판단되면 컴파일된 파일을 찾음
            (컴파일된 파일의 위치 : ./files/cache/template_compiled/{md5(path+filename}.compiled.php)
    • 컴파일된 파일이 없으면 source template file을 읽은후 parsing, 파일로 저장
    • compiled template file을 include
  • 템플릿 파일로 변수 할당하기
    • 템플릿을 지정하기 전에 Context::set('변수이름', $변수) 와 같은 방법으로 context setting을 하게 되면 템플릿에서는 {$변수이름}과 같이 세팅된 변수를 사용할 수 있습니다.

템플릿 문법

  • 변수의 내용 출력 및 함수의 결과물 출력 {와 $ 사이의 space character나 개행문자등이 없이 붙어 있어야 합니다.
{$변수이름} {$변수이름key}
  • 함수 또는 변수의 설정 {와 $ 사이에 @ 를 붙이면 결과를 return하지 않습니다. 이 특징을 이용해서 변수설정이나 함수의 실행, php코드 사용을 할 수 있습니다.
{@ $a = 1}
{@ print $a}
  • 조건절의 사용 (if)
<!--@if(조건문1)-->
...
<!--@elseif(조건문2)->
...
<!--@else-->
...
<!--@end-->
  • 조건절의 사용 (switch)

이 문법에는 문제가 있으니 사용에 주의해주시기 바랍니다. 개선토록 하겠습니다.

<!--@switch($var)-->
<!--@case('foo')-->
...
<!--@break-->
<!--@default-->
...
<!--@end-->

switch 문의 예외 문법

'@break@case(...)'  =>  'break; case(...) :'

'@break@default'  => 'break; default :'

<!--@switch($var)-->
<!--@case('foo1')-->
...
<!--@break@case('foo2')-->
...
<!--@break@default-->
...
<!--@end-->
  • foreach, for등의 반복문 사용
<!--@foreach($변수 as $key => $val)-->
{$key} - {$val}
<!--@end-->
<!--@for($i= 0; $i < 100; $i++)-->
{$i}
<!--@end-->
  • 다른 template 파일 include

템플릿 파일 내에서 또다른 템플릿 파일을 include 할 수 있습니다. 이 때 경로를 지정하지 않으면 현재의 템플릿 파일(template file)의 위치에서 찾고 없으면 ROOT부터 찾아나갑니다.

템플릿 파일에서 공용으로 사용되는 부분이 있다면 공용으로 사용되는 부분을 개별 파일로 include 하게 하는 것이 유지/보수에 유리합니다.

<!--#include("./include.html")-->
<!--#include("./common/tpl/include.html")-->
  • css 파일 import

css 파일을 사용하고자 할 때 아래 문법을 이용하면 html 태그의 <head> .. </head> 사이에 link code가 추가됩니다. 이 때 경로를 지정하지 않으면 현재의 템플릿 파일(template file)의 위치에서 찾고, 없으면 ROOT부터 찾아나갑니다.

<!--%import("./css/style.css")-->
  • 자바스크립트 파일의 import

자바스크립트 파일을 사용하고자 할때 아래 문법을 이용하면 html 태그의 <head> .. </head> 사이에 <script type="text/javascript" src="자바스크립트파일"></script> 코드가 추가됩니다. 이때 경로를 지정하지 않으면 현재의 template file의 위치에서 찾고 없으면 ROOT부터 찾아나갑니다.

<!--%import("./js/test.js")-->
  • 자바스크립트 필터(Xml Js Filter) 파일의 import

자바스크립트 필터(Xml Js Filter)를 사용하고자 할 때 아래 문법을 이용하면 지정된 필터를 컴파일하고 해당 문서에 필터를 적용하게 됩니다. 이 때 경로를 지정하지 않으면 현재의 템플릿 파일(template file)의 위치에서 찾고 없으면 ROOT부터 찾아나갑니다.

<!--%import("./filter/text.xml")-->
  • 주석

HTML에 출력하지 않도록 감출 수 있습니다.

<!--// HTML에 출력되지 않는 주석 -->
<!--// 템플릿 파일에서만 볼 수 있는 주석입니다 -->
  • 기타 경로에 대한 처리

템플릿에서 이미지 태그의 src값이 http:// 나 / 로 시작하지 않는다면 해당 템플릿이 요청된 위치(path)에서 찾도록 합니다. 작업 PC에서 스킨 등의 작업을 하고 그대로 서버에 올리면서 테스트하실 수 있습니다.


st.june

2011.01.16 22:08:05
*.39.176.17

.. 여긴 좀 알아듣겠네요 ㅜㅜ

foreach for 아래에 @for 이어야 할 것이 2for로 되어 있습니다

SMaker

2011.01.17 12:27:32
*.22.160.57

수정하였습니다 :)