phpsource/템플릿2006. 10. 21. 16:43
written: Jan 28 2002
last modified: Oct 21 2006
1.2.0 (2006.10.21)
  • assign() 함수에서 두번째 인자로 지정하여 사용하던 dot 문자에 의한 append 기능을 삭제합니다.
  • 필터기능을 추가하였고, 이러한 필터기능은 미리 정의된 9가지의 실행시간(initialize, premacro, precompile, compile, postcompile, preassign, assign, postassign, output)을 사용자가 선택할 수 있도록 하였으며 지정된 실행시간에 따라 필터기능이 수행됩니다. 또한 템플릿문서에서 사용할 수 있는 허용필터명령을 지정할 수 있도록 하였습니다.
  • 래핑(wrapping)기능이 추가되었습니다. 래핑기능을 이용하면 기존에 작성된 템플릿 문서와 php 문서를 수정하지 않고도 이 문서의 기능을 임의로 수정할 수 있습니다.
  • 템플릿 변수의 구문형식이 수정, 보완되었습니다.
  • 템플릿변수의 내용형식이 기존의 template 문서 뿐만 아니라 일반 텍스트 문서(text document)와 php 스크립트(php script)까지 지정할 수 있도록 하였습니다.
  • 다이나믹블록(블록변수)의 자동할당기능이 추가되었습니다.
  • 자체출력버퍼를 이용하는 출력함수인 output()가 추가되었으며, 이 함수는 기존의 FastPrint() 함수가 가지고 있던 모든 기능을 포함하고 있습니다. 더불어 output() 함수를 이용하면 1.2.0 버전부터 출력관련 기능인 캐시정보보기, output 필터실행시간 처리하기 등의 기능을 수행할 수 있습니다.
  • PHP 4.2.0 버전에서 touch() 함수와 관련하여 "warning error"가 발생하던 버그를 수정하였습니다.
  • win32 플랫폼의 php 4.1.0 버전에서 is_file() 함수의 인자로 지정된 파일이 없을 때 warning 에러가 발생하는 버그를 수정하였습니다.
  • TR 용법을 PROPOSAL(제안서)로 추가하였습니다.
  • 웹서버 루트에서 절대경로 계산시 도메인명 아래에 슬래시가 두개 출력되던 버그를 수정하였습니다.
  • 자바스크립트 문장 내에 있는 인용문에서 인용부호를 이스케이프하였을 때 HTML 문서를 정상적으로 파싱하지 못하고 깨지는 버그를 수정하였습니다.
  • 배열값에 의하여 다이나믹블록(블록변수)의 내용을 자동으로 채우는 기능을 PROPOSAL(제안서)로 추가하였습니다.
  • 동일한 SCRIPT 파일이 중복되었을 때 동일한 파일임에도 불구하고 중복되어 출력되는 버그를 수정하였습니다.
  • 출력문서의 HTML 태그 대문자|소문자를 선택하는 기능이 추가되었습니다.
  • 일부 자바스크립트 문장 압축할 때 발생하던 버그를 수정하였습니다.
  • 캐시파일에 퍼미션을 지정할 수 있도록 하였습니다.
  • 캐시파일을 압축하여 저장할 수 있는 기능을 추가하였습니다.
  • no-file 용법을 PROPOSAL(제안서) 수준에서 정식 기능으로 포함시켰습니다.
1.1.1p3 (2005.4.1)
  • COMMAND 태그 관련 버그를 잡았습니다.
  • 템플릿 파일에 기록된 주소가 도메인에 대한 정보없이 단지 "http://"만이 포함되어있을 때 발생하던 에러를 정상처리하도록 하였습니다.
  • allow_call_time_pass_reference의 값이 Off일 때 발생하던 "Warning: Call-time pass-by-reference ......" 에러가 발생하지 않도록 수정하였습니다.
1.1.1-dev (2005.2.13)
  • 1.1.1 버전부터는 GPL 라이선스 대신에 LGPL 라이선스를 따릅니다.
  • class.hHtmlUrlRedirection.php을 삭제하고 대신에 class.hHtmlUrlParser.php 파일이 포함되었습니다.
  • class.hFastTemplate.php이 삭제되었으며 따라서 향후에는 기존의 FastTemplate 문서를 지원하지 않습니다.
  • php 4.3.10 이상 버전에서 캐시파일이 생성되지 않는 문제가 계속발생하여 func.version_compare.php를 추가하여 개선했습니다.
1.1.0 (2005.1.14)
업그레이드 및 패치(upgrade and patch)
  • class.hHtmlClassify.php에서 자바스크립트 파일 처리 방법을 변경하였습니다.
  • URL 자동변경 기능에서 리소스의 경로를 상대경로 대신에 절대경로로 변경할 수 있도록 하였습니다.
  • html 헤더의 출력유무를 설정할 수 있도록 하였습니다.
  • 새로운 멤버템플릿변수 {::_PATH_TO_TPLS}를 추가하였으며 이를 이용하여 리소스 리디렉션 처리에 좀 더 유연하게 할 수 있도록 하였습니다.
  • <?XML version="1.0"?> 태그를 처리할 수 있도록 하였습니다.
  • 현재 페이지에 대한 캐시 갱신방법을 개선하였습니다.
  • 생성자의 HTML 파서 정보에 두가지 정보를 추가로 설정할 수 있도록 하였습니다.
  • 스타일시트에서의 URL 리디렉션 처리를 개선하였습니다.
  • 템플릿 파일이 비어있는 경우에 발생하는 에러를 없앴습니다.
  • php 4.3.10 이상 버전에서 HW_PHPVERSION 상수 문제로 인해 캐시파일이 생성되지 않는 문제를 수정하였습니다.
  • 이전 버전에서는 member 디렉토리에 있던 class.hClassMember.php 파일을 1.1.0 버전부터 class 디렉토리로 옮겼습니다.
  • 템플릿 변수 구분자(template variable's delimiters)를 상황에 따라 적절히 사용할 수 있도록 "{변수명}" 외에 "<!--{변수명}-->"와 같이 나타낼 수 있도록 하였습니다.
  • 다이나믹 블록의 시작과 끝을 나타내는 구분자를 "<!-- BEGIN DYNAMIC BLOCK: name -->", "<!-- END DYNAMIC BLOCK: name -->" 대신에  "{@name}", "{/name}"로도 나타낼 수 있습니다.
  • 동일한 이름의 블록을 중복으로 나타낼 수 있습니다. 단 나중에 컴파일된 블록 내용으로 처리됩니다.
  • 템플릿파일에서 다른 템플릿 파일을 인클루드할 수 있는 기능("하위템플릿 인클루드")을 추가하였습니다. 자세한 것은 "하위템플릿 인클루드" 메뉴를 참조하세요.
  • get_assigned() 함수에서 지정한 변수명이 존재하지 않는 경우, 이전 버전은 에러를 발생시켰으나 false를 반환하도록 수정하였습니다. 반면에 FastPrint() 함수의 경우는 이전과 같이 지정한 변수명이 존재하지 않는다면 에러를 발생시킵니다.
  • 웹문서 리디렉션에서 다른 쿼리문이 있을 때 정상적으로 처리하지 못하는 문제를 수정
아래와 같은 템플릿 파일의 경우와 같이 링크된 문서에 쿼리문이 붙었을 때 웹문서 리디렉션 기능이 동작한다면
[code html;gutter:false] <!-- filename : a.html --> <P><H3>{TITLE}</H3></P> <P>a.html</P> <P><A href="b.html?tt=b_main">b.html</A></P> <P><A href="c.html?tt=c_main">c.html</A></P> [/code]
이전에는 아래와 같이 웹리디렉션용 쿼리문인 "template=템플릿파일명"이 다른 쿼리문과 구분되지 않았습니다.
[code html;gutter:false] <!-- filename : a.html --> <P><H3>{TITLE}</H3></P> <P>a.html</P> <P><A href="{_SERVER.PHP_SELF}?tt=b_maintemplate=b.html">b.html</A></P> <P><A href="{_SERVER.PHP_SELF}?tt=c_maintemplate=c.html">c.html</A></P> [/code]
이 문제를 수정하여 아래와 같이 다른 쿼리문과 구분되도록 하였습니다.
[code html;gutter:false] <!-- filename : a.html --> <P><H3>{TITLE}</H3></P> <P>a.html</P> <P><A href="{_SERVER.PHP_SELF}?tt=b_main&template=b.html">b.html</A></P> <P><A href="{_SERVER.PHP_SELF}?tt=c_main&template=c.html">c.html</A></P> [/code]
  • 템플릿 변수가 복수개로 정의되어 있거나 여러번 할당하는 경우, 변수의 형식에 관계없이 마지막 값만이 유효합니다.
  • hHtmlUrlRedirection 클래스에서 정의된 private 함수인 _get_script_info(), _get_file_info(), _relative_path() 메소드를 별도의 클래스 hGlobals(파일명 class.hGlobals.php)로 분리시켰습니다. 아울러 _get_file_info() 메소드에 약간의 문제가 있어 수정하였습니다.
  • 템플릿 변수 디버깅할 때 나타나는 "template file" 정보를 개선하였습니다.
  • hTemplateStructure 및 hTemplateDebug 클래스에서 정적변수 처리로 인한 오버헤드를 줄이기 위해 hTemplateStructure 및 hTemplateDebug 클래스 구조를 Singleton 패턴으로 수정하였습니다. 이에 따라 Singleton 패턴을 처리하는 클래스인 class.hSingleton.php가 추가되었습니다.
  • <BASE> 태그에서 "href" 속성없이 "target" 속성만 있을 때 <BASE> 태그가 사라지는 버그를 수정하였습니다.(지용호님 지적 내용)
  • 1.0.0 버전에서 Proposal(제안서)로 소개되었던 웹문서 리디렉션 기능에서 확장자가 "html"인 웹문서를 상대경로로 지정하게 되면 무조건 이 기능이 수행되었습니다. 그런데 이 기능 때문에 기존에 사용하던 HTML 문서 중에 확장자가 "html"이었던 문서와 충돌이 되어 후키템플릿이 정상적으로 동작되지 않는 경우가 있었습니다. 따라서 이 기능을 기본적으로 동작되지 않도록 수정하였습니다. 만약 이 기능을 사용하기를 원한다면 "웹문서 리디렉션"에 대한 설명서를 참조하여 해당 파일 내용을 수정하시기 바랍니다.
  • parse_url() 함수가 PHP 버전에 따라 반환값이 다르게 나타나는 관계로 hHtmlUrlRedirection 클래스에서 정의된 private 함수인 _url_redirection() 메소드에 문제가 있어 웹문서 리디렉션 기능이 정상적으로 동작하지 않을 때가 있어 수정합니다.
  • assign() 함수에서 "." 문자에 의한 append 지원방식을 삭제하였습니다.
  • class.hHtmlClassify.php 파일에서 아래와 같이 </HEAD> 바로 뒤에 나타나는 일반문자열(태그없이 나타나는 문자열)이 사라지는 버그를 수정합니다.
이전 버전에서는 아래와 같은 예를 class.hHtmlClassify.php으로 분류하게 되면 "태그 바깥쪽의 문자열" 부분이 없어지는 버그가 있었습니다. 이를 정상적으로 나타나도록 수정하였습니다.
[code html;gutter:false] <HEAD>......</HEAD> 태그 바깥쪽의 문자열 <P>태그 안쪽의 문자열</P> [/code]
1.0.0 (2003.4.30)
업그레이드(upgrade)
  • 객체 생성을 여러번 하는데 따른 문제점 개선 - 객체 생성 및 소멸
  • 템플릿 정보의 캐시 저장을 소멸자에서 실행하도록 수정 - 객체 생성 및 소멸
  • 복수 템플릿 파일에 존재하는 공통 부분(<HEAD> ~ </HEAD> 및 <BODY attrib>)을 클래스 hTemplate의 생성자에서 설정한 '사용자 정의 출력버퍼 콜백함수'를 수행할 때 단 한번만 출력하도록 하였습니다. - 복수 템플릿파일의 용법
  • 템플릿 변수 선언과 할당에 대한 상태를 파악할 수 있는 디버깅 기능 추가 - 템플릿 변수 정보
  • 템플릿 파일 정보를 확인할 수 있는 디버깅 기능 추가 - 템플릿 파일 정보
  • 멤버 템플릿 변수 지원 - 멤버 템플릿 변수
  • assign() 함수의 append 기능 개선 - assign()
  • switch문의 각 case 값 출력 문제 개선 - switch문
  • 중첩 switch문 지원 - switch문
  • <SCRIPT> 태그 파싱 개선
  • <PARAM> 태그 파싱 개선 - 리소스 리디렉션
  • FastTemplate용 문서 사용을 위한 hFastTemplate 클래스 제공 - FastTemplate 호환
  • 템플릿 파일 기본 디렉토리의 다중화 지원 - 객체 생성 및 소멸
  • HTML 파서 기능을 사용자가 선택 - 객체 생성 및 소멸
  • URL 리디렉션 기능을 사용자가 선택 - 객체 생성 및 소멸
  • HTML 문서 압축 기능을 사용자가 선택 - 객체 생성 및 소멸
  • 다중 템플릿 파일의 특수용법에서 공통 부분 처리 버그 수정
  • 캐시 접근을 위한 코드들이 캐시핸들러 1.0.0 버전에 맞게 수정되었습니다. - 캐시핸들러
  • 캐시를 이용할 때 $_POST[], $_GET[], $_SERVER[] 등 미리정의된 수퍼글로벌변수를 정상적으로 생성하지 못하는 문제 해결
  • 복수의 템플릿 파일로 구성된 문서에서 일부 템플릿만 갱신되는 경우에 출력이 정상적으로 이루어지지 않는 버그 수정
  • 캐시 파일명은 $PHP_SELF에 해당하는 문자열과 캐시 id의 조합으로 생성되며, 이전 버전의 조합방법이 다소 변경되었습니다. 따라서 캐시파일은 이전 버전과 호환성이 없습니다.
  • 캐시 id를 지정하지 않으면 $PHP_SELF에 해당하는 문자열만 가지고 캐시 파일이 생성됩니다. 이전 버전에서는 캐시 핸들러의 캐시 id 기본값으로 생성되었습니다.
  • 한 문서에서는 garbage collection을 디렉토리별로 한번만 수행
  • 캐시파일의 내용을 URL을 통해 불법적으로 접근하는 경우에 그 내용이 웹브라우저에 나타나지 않도록 개선
  • 자바스크립트 이벤트 핸들러에 의해 실행되는 자바스크립트 함수로 전달되는 URL 리디렉션 기능 추가 - URL 리디렉션
  • 1.0.0 베타버전에서의 class.hHtmlReboundUrl.php 파일명이 class.hHtmlUrlRedirection.php로 변경되었으며, 이 파일에 정의되어있는 클래스 hHtmlReboundUrl은 hHtmlUrlRedirection으로 변경되었습니다.
  • 생성자에 전달하는 HTML 파서 관련 설정값 중에 active_rebound_url을 active_url_redirection으로 변경하였습니다.
  • 클래스 HtmlUrlRedirection에 정의된 rebound_url 관련 함수명을 url_redirection 으로 변경하였습니다.
제안서(proposal)
  • no-file 용법 제안 - no-file 용법
  • 하이퍼링크로 연결된 웹문서의 리디렉션 - 웹문서 리디렉션
0.0.4 (2003.1.15)
  • 에러 발생 수준을 E_ALL로 설정한 후 발생하는 warning error을 전반적으로 수정하였습니다.
  • 에러 핸들링을 trigger_error() 함수를 이용하였습니다.
  • 현재 zend.com에서 개발 중인 Zend 엔진 2.0과의 소스 호환성을 위하여 객체 생성할 때 참조 연산자 "&"를 사용하지 않았습니다.
  • 웹서버의 플랫폼이 윈도우 기반인지를 판별하는 방법을 $this->iswin = ("WIN" == strtoupper(substr(PHP_OS, 0, 3))) ? true : false; 으로 변경하였습니다.
  • 템플릿 파일에서 사용가능한 특수문자로 콤마(,)가 추가되었습니다. 콤마는 switch문에서 사용하는 특수문자로 콤마 앞에다 역슬래시(\)를 붙여주면 되면 콤마를 출력할 수 있습니다. 템플릿 변수의 초기값을 나타내는 문자열에 콤마를 나타낼 때 이 방법을 이용하면 됩니다.
  • 템플릿 파일에서 사용가능한 특수문자로 콤마(,)가 추가되었습니다. 콤마는 switch문에서 사용하는 특수문자로 콤마 앞에다 역슬래시(\)를 붙여주면 되면 콤마를 출력할 수 있습니다. 템플릿 변수의 초기값을 나타내는 문자열에 콤마를 나타낼 때 이 방법을 이용하면 됩니다.
  • (버그)class.hTemplate.php의 assign_var() 메소드 수정 - 후키템플릿의 switch문(조건문) 설명을 보면 true일 때는 나열된 값의 마지막 값으로 출력하고 false일 때는 그 전값(끝에서 두번째값)으로 처리하도록 되어 있습니다. 그런데 문자열 인덱스인 경우를 제대로 처리하지 못하는 벌레가 있어 수정합니다. 수정하게 되면 설명서에 있는대로 키값에 관계없이 마지막 값과 그 전값을 출력합니다.
  • (버그)class.hTemplate.php의 merge_var() 메소드 수정 - 이 함수는 템플릿 변수를 등록하면서 초기화하는 함수로 이미 템플릿 변수가 등록되어 있는 경우는 새로이 등록하지 않고 넘어간다.
  • (버그)class.hTemplate.php의 $_POST[], $_GET[], $_SERVER[] 등에 해당하는 템플릿 변수 생성문제 - 예를 들어 $_POST["mode"], $_GET["table"], $_SERVER["PHP_SELF"]에 해당되는 템플리 변수 {_POST.mode}, {_GET.table}, {_SERVER.PHP_SELF}가 정상적으로 생성되지 못하네요.
  • (개선)class.hTemplateParser.php의 is_template_name() 메소드 수정
  • (버그)class.hTemplateParser.php의 relative_path() 메소드, rebound_url() 메소드 수정
  • (버그)class.hHtmlParser.php의 is_tag() 메소드 수정 - <tr >와 같이 속성없이 스페이스만 있는 경우에 정상적으로 해석하지 못하고 태그가 깨집니다.
  • class.hHtmlParser.php의 스택 자료구조를 위한 클래스를 별도의 클래스로 분리
  • class.hHtmlParser.php의 str_space_null($attrib) 메소드를 정규표현식으로 대체
  • (개선)class.hCache.php의 garbage collection 핸들러를 private 함수로 변경 - 이전 버전에서는 보통 객체 생성한 후에 garbage collection 핸들러를 명시적으로 실행하여야 하였으나 이를 open 함수 내에서 동작하도록 수정하였습니다. 한 문서에서는 객체 생성을 몇 번을 하던지 관계없이 단 한번만 garbage collection을 하도록 하였습니다.
0.0.3 (2002.9.20)
0.0.3으로 판올림되면서 경로문제로 현재 저장되어 있는 캐시 파일들이 모두 갱신되어야 합니다. 판올림하면서 템플릿 파일이 수정된다면 관계없으니 그렇지 않다면 판올림하기 전에 캐시 파일들을 모두 지워주시기 바랍니다.
  • 템플릿 파일에서 특수문자({, }, |)의 표시 기능을 개선함 - 특수문자({, }, |)를 템플릿 파일에 삽입하기 위해서는 어느 곳이든지 상관없이 앞에다 역슬래시(\)를 붙여주면 됩니다. 이전 버전에서는 그 위치에 많은 제한을 받고 있습니다.
  • switch문에서만 가능했던 반복문을 일반문까지 반복할 수 있도록 확대 적용
  • 템플릿 변수에 초기값(default) 설정
  • 템플릿에 지정된 경로가 현 스크립트 문서의 하위디렉토리에 있는 경우에는 현 스크립트 문서의 경로를 기준으로 상대 경로로 자동 변환
0.0.2-패치1 (2002.7.27)
후키 템플릿(class.hTemplate.php) 수정
  • (버그)행번호 137번 assign_str() 함수 수정 및 멤버변수 $ARRAYKEY 추가
후키 템플릿 파서(class.hTemplateParser.php) 수정
  • (버그)행번호 359번 attrib_to_string() 함수 수정
  • (버그)행번호 546번 process_head() 함수 수정
  • (버그)행번호 652번 head_parse_into_struct() 함수 수정
  • (개선)행번호 131번 set_case_var() 함수 수정
후키 HTML 파서(class.hHtmlParser.php) 수정
  • (버그)행번호 276번 attrib_to_array() 함수 수정
  • (개선)삼중 인용 부호 처리
홈페이지 문서(후키라이브러리>>후키템플릿) 수정
  • (오기?)"템플릿의 switch문" 중 "BOOLEAN 인덱스" 항목 내용 수정
  • (문법변경)"템플릿의 switch문" 중 ""반복 switch문" 항목 내용 수정
0.0.2 (2002.7.17)
  • FastTemplate와의 호환성을 지원하지 않음, FastTemplate와의 호환 버전은 필요하다면 LIGHT 버전으로 별도 공개하겠음
  • 미리 정의된 템플릿 변수 제공("미리 정의된 템플릿 변수" 참조)
  • switch문 강화("템플릿의 switch문" 참조)
  • URL 자동 변경 기능 보완
  • 복수 템플릿 파일에서 각 파일마다 독립적인 헤더 태그 내용 구성("복수 템플릿 파일의 용법" 참조)
  • PHP_OS 상수를 이용하여 서버가 윈도우 시스템인지 아닌지 자동 판별
  • 템플릿 변수를 나타내는 "{" 문자를 일반 문자로 템플릿에 포함할 수 있음
  • 복수 case문을 나타내는 "|" 문자를 일반 문자로 switch문 안에 포함할 수 있음
  • 논리 부정 연산자 "!" 제공
  • assign() 함수가 나타난 이후에도 define() 함수를 사용할 수 있음
  • "define(템플릿명, 템플릿 파일명)"에 의한 단일 템플릿 파일 지정 방법 추가
  • 파일시스템용 후키 캐시 파일명 변경(class.hCacheFile.php -> class.hCache.php)
  • 파일시스템용 후키 캐시만 지원
0.0.1-패치5 (2002년4월25일)
  • 서버가 윈도우 시스템인지 아닌지 자동 판별
  • switch문 내에서 템플릿 변수 사용시 문제 해결
  • URL 자동 변경 기능 개선
0.0.1-패치4 (2002년4월1일)
다양한 형태의 URL을 지원하기 위하여 rebound_url 함수를 수정하였습니다.
0.0.1-패치3 (2002년3월25일)
복수 case문에서의 각 case문을 콤마대신에 "|" 문자로 구분하도록 수정하였습니다. 문제점을 지적하여 주신 MagicStorm(궁금) 님에게 감사드립니다.
  • 멤버변수 $CASE_SEPARATOR 추가
  • set_tpl_body 함수 수정
  • tag_to_string 함수 추가 수정
0.0.1-패치2 (2002년3월21일)
궁금 님이 지적하신 문제(태그 내에 템플릿 변수가 있는 경우)를 해결하기 위하여 수정하였습니다.
  • set_path 함수 수정
  • rebound_url 함수 수정
  • rebound_attrib_url 함수 신설
  • attrib_to_string 함수 수정
  • tag_to_string 함수 수정
0.0.1-patch1 (2002년2월26일)
error reporting level을 NOTICE까지 포함하여 설정하게 되면 몇몇 문장에서 NOTICE 에러가 발생하는 것을 확인하였습니다. 아래는 수정된 행번호 및 내용입니다. 이 문제는 amocra 님이 지적하여 주었습니다.
  • 222행 수정 : if (!empty($arg["update"]));
  • 694행 수정 : if (isset($this->TPLS["*_VAR_defined_in_TPL_*"])) $this->VARS = $this->TPLS["*_VAR_defined_in_TPL_*"];
  • 777행 수정 : if (isset($this->VARS[$var_name]) && is_array($this->VARS[$var_name])) {
  • 855행 수정 : if (!$value || $this->empty_tpl('.'==$value[0] ? substr($value,1) : $value)) {
0.0.1-beta (최초 공개 버전,2002년1월26일)
  • FastTemplate와의 호환성에 중점을 두고 개발
  • 중첩 블록 기능 추가
  • 처리 속도 향상
  • 위지윅 방식으로 구현된 switch문
  • URL 자동 변경 기능

'phpsource > 템플릿' 카테고리의 다른 글

{후키템플릿}5.2.조건 변수  (0) 2006.11.02
{후키템플릿}5.3.블록 변수  (0) 2006.10.30
{후키템플릿}8.5.전처리 명령  (0) 2006.10.16
{후키템플릿}8.4.php 명령  (0) 2006.10.16
{후키템플릿}7.2.내용 형식  (0) 2006.10.16
Posted by 방글24