Enable!

템플릿 문법이란?


  템플릿 문법이란 XE에서 개발의 편의를 위해 고안한, XE에서만 쓰이는 일종의 언어이다. 템플릿 문법을 통해 레이아웃, 스킨 개발을 수월하게 할 수 있으며, XE 내부 변수에 쉽게 접근할 수 있다. 여기서는 자주 쓰이는 개념을 중심으로 설명하겠다.




1. 중괄호({})


  중괄호는 XE에서 php 코드나 변수를 사용할 때 바깥에 씌우는 문자이다. 어떠한 작업을 수행할 때는 { 뒤에 @을 붙여 {@ (코드) }의 형태로 나타내며, 변수를 출력할 때는 {$변수명}으로 작성한다. 변수 속의 변수는 {$변수명->변수명2}, 변수 속의 함수는 {$변수명->함수명()}로 출력한다.




2. 변수


  변수는 어떤 값을 저장하고 있으며 상황에 따라 달라질 수 있다. 언어 출력을 위한 문자열이 들어가기도 하고, 컨텐츠의 정보를 담고 있기도 하는 등 그 종류는 다양하다. 또한 변수 속에는 값뿐만 아니라 함수, 값 속의 값 등을 포함하기도 한다. XE에서 제공하는 변수를 사용할 수도 있지만 직접 선언할 수도 있다. {@ $변수명 = 값 }으로 선언하면 된다.




3. 배열


  배열은 여러 요소가 일정한 규칙에 따라 나열되어 있는 집합을 말한다. 배열은 {$배열명[번호]}로 출력할 수 있다.




4. 연산자


  연산자는 여러 값들을 계산, 비교, 참조하기 위해 사용하는 문자이다. 연산자는 if문에서 유용하게 사용된다.


비교 연산자

A == B : A와 B가 같다

A != B : A와 B가 같지 않다

A > B : A가 B보다 크다

A >= B : A가 B보다 크거나 같다

A < B : A가 B보다 작다

A <= B : A가 B보다 작거나 같다


논리 연산자

!A : A가 참이 아니다

A && B : A와 B가 모두 참이다

A || B : A와 B 둘 중 적어도 하나는 참이다


계산 연산자

-A : A의 반대

A + B : A에 B를 더한다

A - B : A에 B를 뺀다

A * B : A에 B를 곱한다

A / B : A를 B로 나눈 몫

A % B : A를 B로 나눈 나머지




5. include문


  include문은 다른 파일을 문서 안으로 포함시킬 때 사용한다. 기본 문법은 다음과 같다.


<!--#include("header.html")-->

<include target="header.html" />


  위는 구문법, 아래는 신문법으로 작성된 것이다. 뜻은 같은 폴더에 있는 header.html을 불러오라는 의미이다. 불러오려는 파일이 불러오는 파일과 같은 위치에 있다면 경로를 생략한다. 그런데 경우에 따라 상대주소가 달라져 레이아웃이나 스킨이 깨지기도 한다. 그럴 때는 스킨 경로를 출력하는 변수인 {$tpl_path}를 사용해야 한다.




6. import문


  import문 역시 다른 파일을 포함시킬 때 사용한다. 이때 css, js, xml 등을 불러올 수 있다.



<!--%import(“default.css")-->

<!--%import(“default.js")-->

<!--%import(“xe.xml")-->




7.  load문


  load문 역시 파일들을 불러올 때 사용한다.


<load target="default.css" />

<load target="default.js" />

<load target=“xe.xml" />




8. <!--@코드-->


  XE에서는 php 코드를 실행할 때 중괄호에 넣어서 표현한다. 그런데 이것은 php 자체적으로 쓰는 중괄호와 겹치기 때문에 오류가 발생하기 쉽다. 따라서 별도의 형식을 지정하는데, foreach, for, switch, break, case, default, if, elseif, else, end를 사용할 수 있다.




9. if문


  if문은 특정 조건이 만족되거나 그렇지 않았을 때 어떻게 할 것인지를 지정한다. 가장 간단한 형태는 다음과 같다.


<!--@if(조건)-->

실행될 내용

<!--@end-->


  괄호 안의 조건이 만족되면 if와 end 사이의 내용이 실행된다. end는 해당 구문을 종결시키는 역할을 한다.


  그렇다면 그 조건이 만족되지 않을 때는 어떨까? else문을 사용하면 된다.


<!--@if(조건)-->

조건이 만족될 때 실행될 내용

<!--@else-->

조건이 만족되지 않을 때 실행될 내용

<!--@end-->


  조금 더 복잡한 형태도 있다.


<!--@if(조건1)-->

조건1이 만족될 때 실행될 내용

<!--@elseif(조건2)-->

조건1이 만족되지 않고 조건2가 만족될 때 실행될 내용

...<!--@elseif(조건n)-->

앞의 조건이 만족되지 않고 조건n이 만족될 때 실행될 내용

<!--@else-->

앞의 모든 조건이 만족되지 않을 때 실행될 내용

<!--@end-->


  이런 식으로 여러 조건을 사용할 수 있다.


  연산자는 if문에서 아주 유용하게 쓰인다. 다음을 보자.


<!--@if(조건1 || 조건2)-->

조건1과 조건2 중 하나라도 만족될 때 실행될 내용

<!--@end-->


<!--@if($string=='A')-->

실행될 내용

<!--@end-->


  위의 구문은 조건 두 개 중 하나라도 만족될 때, 아래의 구문은 변수가 특정 값을 가지고 있을 때 작업이 실행되도록 한 것이다. if문은 회원/비회원 구분, 관리자 확인, 권한 확인, 게시글 정보 확인 등의 상황에서 응용할 수 있다.




10. cond문


  cond문 역시 조건에 따라 특정 코드를 실행시키는 구문이다.


<div cond="조건"></div>


  if문이 '이 조건이 만족될 때 아래 내용을 실행하시오'라면, cond문은 '이 태그를 이 조건이 만족될 때 실행하시오'라고 할 수 있다. cond문은 태그에 가상의 속성을 부여하여 해당 태그가 실행되는 조건을 제어할 수 있다.


<div style="backgroud:blue;"|cond="$color='blue'"></div>


  위의 코드는 앞의 cond문과 조금 다르다. 위의 코드는 변수 color의 값이 blue일 때 div의 배경을 파란색으로 변경하라는 의미이다. cond는 다른 속성의 뒤에 |를 선행하여 특정 조건이 만족될 때 앞의 속성이 적용되도록 할 수 있다.


  이제 다음 코드를 살펴보자.


<!--@if($is_logged)-->

<p>로그인하셨습니다.</p>

<!--@else-->

<p>로그인하지 않으셨습니다.</p>

<!--@end-->


<p cond="$is_logged">로그인하셨습니다.</p>

<p cond="!$is_logged">로그인하지 않으셨습니다.</p>


  두 코드 다 로그인 상태를 체크해서 메시지를 다르게 보여주는 기능을 한다. 그러나 if문으로 구성한 전자는 146byte나 차지하는 반면 후자의 코드는 117byte에 불과하다. 같은 기능을 하는 구문이라도 코드의 가독성, 용량 등을 고려해 적합한 것으로 선택해서 작성해야 한다.




11. for문


  for문은 특정 내용을 일정 회수만큼 반복하는 것이다.


<!--@foreach($i=0;$i<100;$i++)-->

반복할 내용

<!--@end--> 


 괄호 안의 구문을 설명하자면, 반복하기 앞서 반복회수를 저장하는 변수 i를 선언하고 초기값으로 0을 지정한다. 그리고 i가 100보다 작을 때마다 반복문을 실행하며, i는 한 번에 1씩 올라간다. 따라서 위의 반복문은 특정 내용을 100회 실행하는 것이다.




12. foreach문


  foreach문은 특정 배열 안의 내용들을 반복할 때 사용하는 구문이다.


<!--@foreach(변수명 as $val)-->

{$val}

<!--@end-->


<!--@foreach(변수명 as $key => $val)-->

{$key} - {$val}

<!--@end--> 


  전자는 key값 없이, 후자는 key값과 함께 반복하는 것이다. foreach문은 게시판 목록 등에서 사용되는데 특히 본문 나열형 스킨에서 쓰인다.




13. loop문


  loop문 역시 특정 내용을 반복할 때 사용한다. cond문처럼 다른 태그의 가상 속성으로 사용된다.


<div loop="조건(배열, 회수 등)"></div>




14. <block></block>


  block 태그는 html에 존재하지 않는 가상의 태그로, 필요에 따라 요소들을 묶어서 처리할 때 사용한다. 그 자체로는 아무런 기능을 하지 않는다.



15. 주석


  주석이란 파일에 존재하지만 기능하지 않는 코드를 의미한다. 주석의 형태는 다음과 같다.


<!-- html 주석 -->

/* css 주석 */

// 자바스크립트 주석


  XE에서는 한 가지를 더 쓴다. 


<!--// 주석 --> 


  이 주석은 코드 상에는 존재하지만 처리 과정에서 사라져 결과물에서는 나타나지 않는다. 주석은 주로 메모에 이용되는데, 작업의 효율을 높이고 유지, 보수에 도움을 준다.



참고문헌


연산자 : 

http://php.net/manual/kr/language.operators.arithmetic.php

http://php.net/manual/kr/language.operators.comparison.php

http://php.net/manual/kr/language.operators.logical.php


템플릿 문법 : 

https://www.conory.com/note_develop_web/15777

http://www.xeschool.com/xe/xenote_template_syntax_expressions (예제 일부 변형 및 인용)