지정자는 뒤에 따라오는 값이 사용되어야 하는 사용 처를 알려주는 역할을 합니다. 앞장에서 설명한 바와 같이 지정자에는 등호(=)의 좌측에 올 수 있는 모드지정자와 콜론(:)의 좌측에 올 수 있는 속성지정자가 있습니다.
;table:top ctrl=cols:3 attrib=border:0;width:96%
; group:
; td: value=desc:$v1 attrib=colspan:3;height:20
; td: value=gfunc:$v8 attrib=align:center;colspan:3
; td: value=gvar:$v9 attrib=height:19;colspan:3
; td: attrib=colspan:3;height:19
모드지정자명(이하 모드명)과 속성지정자명(이하 속성명)은 미리 지정된 키워드이며, table, group, td를 제외한 모든 속성지정자는 반드시 모드지정자를 가지고 있으며, 각 모드지정자에 속한 속성지정자도 정하여져 있습니다. 지정된 모드지정자명과 각 모드지정자 별로 포함할 수 있는 속성지정자는 아래와 같습니다.
모드명 -> value, attrib, style, ctrl, (id)
속성명
(id) 모드 -> table, group, td
value 모드 -> desc, gfunc, gvar, mfunc, mvar, file, table
attrib 모드 -> border, width, colspan, height, align 와 같이
HTML 태그 내에 포함될 수 있는 모든 속성명
style 모드 -> background-color, text-align 와 같이 스타일
내에 포함될 수 있는 모든 스타일명
ctrl 모드 -> cols, repeats
모드지정자 id
다른 모드지정자는 속성지정자 좌측에 반드시 표시하여야 하지만 id 모드지정자는 생략할 수 있으며 따라서 속성지정자 table, group, td로만 나타낼 수 있습니다. 지정위치는 다른 모드지정자보다 먼저 나타나야 합니다.
id 모드지정자를 생략한 경우
;table:top ctrl=cols:3 attrib=border:0;width:96%
; group:
; td: value=desc:데이터 attrib=colspan:3;height:20
id 모드지정자를 지정한 경우
;id=table:top ctrl=cols:3 attrib=border:0;width:96%
; id=group:
; id=td: value=desc:데이터 attrib=colspan:3;height:20
하나의 속성지정자 "table" 이 "<TABLE>...</TABLE>" 한 짝, 하나의 속성지정자 "group" 이 하나 이상의 "<TR>...</TR>" 짝, 하나의 속성지정자 "td" 가 "<TD>...</TD>" 한 짝을 나타냅니다.
속성지정자 "table"에 지정해야 하는 속성 값을 table identification이라고 하며, 약자로 tid 라고 합니다. 또한 속성지정자 "group"의 속성 값을 group identification(gid), 속성지정자 "td"의 속성 값을 field identification(fid) 라고 합니다.
tid는 반드시 지정하여야 하고 현재 페이지에서 사용되는 하나 이상의 템플릿 파일에서 유일한 값이어야 합니다. 또한 최상위 유닛테이블의 tid는 아래와 같이 "main"으로 지정하여야 합니다. c언어에서 제일 먼저 접근하는 함수명이 main()함수인 것처럼 가장 밖에 위치하는 테이블 태그를 생성하는 유닛테이블의 tid 값도 "main"으로 지정되어 있습니다.
;table:main attrib=width:740px;border:0;cellpadding:0;/
cellspacing:0
; group: attrib=bgcolor:white;align:center
; td: value=table:top attrib=valign:bottom
; td: value=table:middle attrib=valign:top
; td: value=table:bottom attrib=valign:top
gid, fid는 특별한 이유가 없으면 지정할 필요가 없습니다. 지정해도 실행에는 전혀 문제가 없지만, 그래도 지정하지 않는 것이 편하겠지요. 지정하지 않으면 유닛테이블 엔진이 알아서 gid, fid를 지정해 줍니다. 유닛테이블에서 지정되는 gid는 g01, g02, ..., fid는 f01, f02, ... 같이 순차적으로 이루어지지요. 해당 gid, fid의 모드지정자 value, attrib, style, ctrl의 속성 값들을 다이내믹(?)하게 조작할 필요가 있을 때 gid, fid 값을 사용자가 임의로 정하면 됩니다. 이런 경우의 예제는 뒷장의 "고급 메소드"를 설명할 때 보여주려고 하지만 고급 메소드 부분은 당분간 언급할 생각이 없습니다. 고급 메소드에 대한 인터페이스를 아직 확정하지 못하고 있어서 그렇거든요. 내부적으로는 이미 세부적인 것까지 다룰 수 있도록 되어 있지만, 인터페이스 설계를 잘못하면 향후 업그레이드할 때 상당히 애를 먹거든요. 그래서 여러분의 반응을 보아가면서 인터페이스를 결정하려고 합니다.
모드지정자 value
레이아웃 내에 들어갈 데이터를 지정해 주는 곳으로, 지정할 수 있는 데이터는 아래와 같이 다양한 방법으로 제공받을 수 있습니다.
- 디스크립션
- PHP의 전역변수
- PHP의 전역함수
- PHP 클래스의 프로퍼티
- PHP 클래스의 메소드
- 별도의 텍스트 파일
위에서 나열한 디스크립션, 전역변수, 전역함수, 프로퍼티, 메소드 및 텍스트파일은 모두 템플릿 변수로 사용됩니다. 따라서 유닛테이블에서 수식어 없이 템플릿 변수라고 호칭할 때는 이 모두와, 여기에 템플릿 파일의 지역변수까지 포함한 것을 의미합니다. 각각의 요소를 사용하는 방법은 아래와 같습니다.
td: value=desc:{어제는 비가 내리고}
td: value=gvar:g_msg
td: value=gfunc:g_func()
td: value=mvar:m_msg
td: value=mfunc:m_func()
td: value=file:filename
desc:{어제는 비가 내리고}는 속성 값을 디스크립션으로 해석하여 "어제는 비가 내리고"를 TD 태그 내에 삽입되어 "<TD>어제는 비가 내리고</TD>"가 되며, gvar:g_msg은 속성 값 g_msg를 전역변수로 해석하여 PHP 코드의 전역변수 $GLOBALS[g_msg]의 값을 TD 태그 내에 삽입하고, gfunc:g_func()은 PHP 코드의 전역함수 g_func()의 return 값을 되돌려 받아 TD 태그 내에 삽입하고, mvar:m_msg와 mfunc:m_func()은 반드시 클래스 내에서만 사용되며, 각각 클래스 m_msg 프로퍼티 값과 m_func() 메소드의 리턴 값을 가지고 TD 태그에 삽입하여 HTML을 생성합니다. 마지막으로 file:filename은 TD 태그 내에 특정 텍스트파일을 포함시키고자 할 때 사용하는 방법으로 속성 값에는 TD 태그 내에 삽입하려는 파일명을 지정하여야 합니다.
모드지정자 value에 지정할 수 있는 속성지정자 중에 위에서 언급하지 않은 것이 또 하나 있는데 그것은 "table"입니다. 이 속성지정자는 레이아웃을 표현하기 위한 지정자로 이 지정자에 대하여는 뒷장 "레이아웃을 위한 자료구조"에서 자세히 살펴보겠습니다.
모드지정자 ctrl
ctrl 지정자에는 cols와 repeats 속성지정자가 있습니다. 이중 cols 지정자는 id가 table인 줄에만 포함할 수 있으며, repeats 지정자는 id가 tabel 또는 group인 줄에만 포함할 수 있습니다. 각각의 용도를 보면, cols 지정자는 현재 테이블의 최대 컬럼 수를 지정할 때 사용하고, repeats 지정자는 현재 요소를 반복 재생할 때 사용합니다. id=table에서 repeats를 사용하면 현재 "<TABLE>...</TABLE>"가 repeats에서 지정된 속성 값만큼 반복해서 나타나고, id=group에서 repeats를 사용하면 현재 grouping된 하나 이상의 "<TR>...</TR>" 짝이 repeats에서 지정된 속성 값만큼 반복해서 나타납니다.
모드지정자 attrib, style
attrib와 style 지정자는 태그의 속성과 스타일을 지정할 때 사용되는 것으로 HTML 태그 사용법을 알고 있다면 더 이상 설명이 필요 없을 것 같습니다.