ASP 템플릿 클래스 설명
작성자: shaoyun Form www.devjs.com
시간: 2008-12-10 17:05
++기능 소개
--단일 레이어 루프 태그를 지원하며 페이지 클래스에서 여러 번 사용할 수 있습니다.
--템플릿 파일 도입을 지원합니다. 로드 시 템플릿이 병합됩니다.
--템플릿 파일 경로를 지정할 수 있습니다. 경로는 상대 경로이며 기본값은 현재 파일 경로입니다.
--빈 줄의 최종 출력을 위해
++ 태그 정의
{$tag$} 일반 태그를
삭제합니다.
{$include:filename$} 템플릿 파일 태그
<loop name="tagname">...</loop> 루프 태그, 이름 속성은 태그 이름입니다.
루프 태그의
하위 태그++ 태그 설명
:정규식을 사용하여 태그를 일치시키고 필터링합니다. 루프 태그의 이름 속성 앞에 공백이 여러 개 있을 수 있으며, 이름 앞뒤에 다른 속성이 있을 수 있습니다. 속성은 따옴표로 묶을 수도 있고, 큰 따옴표로 묶을 수도 있습니다. 설정은 첫 번째
++ 함수 설명
과만 일치합니다.LoadTPL 함수는 템플릿 파일을 읽을 때 템플릿 파일에서 중첩된 템플릿 파일 태그를 확인합니다. 중첩된 템플릿 파일 태그의 내용을 교체하고 템플릿 파일을 병합한 후 변수
Assign 함수에 저장하여 템플릿 태그를 분석합니다. 일반 태그의 경우 데이터 개체에 추가합니다. 루프 데이터 객체인 경우 이를 교체하면 사이클에 축적된 데이터가 데이터 객체
Flush 함수 템플릿 클래스에 추가됩니다. 이는 단일 사이클 라벨을 처리하는 데 사용되는 매우 중요한 기능입니다. 사이클은 사이클 블록의 내부 교체를 수행하고 사이클 데이터를 누적 및 저장합니다. 각 단일 사이클이 완료되면 Bulid 함수를 호출하여
저장되지 않은 루프 데이터를 데이터 객체에 추가한 다음 모든 데이터를 출력해야 합니다. 템플릿 정의에 따라 데이터 개체가 이 단계에서 완료됩니다. 특히
할당 기능은 기본 속성을 호출하여 값을 할당하는 것입니다. 예:
프로그램 코드
tp.sign("title","news") 는
보다 간결한 할당 방법
프로그램 코드를
사용할 수 있습니다.
tp("title")="News"
tp는 인스턴스화된 템플릿 개체입니다.
전체 템플릿 코드는 다음과 같습니다(template.asp).
프로그램 코드
<%
클래스 템플릿
비공개 m_content,m_looptmp,tagData,loopdata,m_loop_content,m_Looptag,m_TplPath,m_SetTplPath
비공개 m_ClassName,m_Version,m_Copyright
비공개 하위 클래스_Initialize()
m_content="" : m_looptmp="" : m_loop_content="" : m_looptag=""
m_ClassName="Shaoyun ASP 템플릿 클래스" : m_Version="1.0" : m_Copyright="DevJS.com"
m_TplPath="./" : m_SetTplPath=false
tagData = Server.CreateObject("Scripting.Dictionary") 설정
loopData = Server.CreateObject("Scripting.Dictionary") 설정
End Sub
Private Sub Class_Terminate()
m_content="" : m_looptmp="" : m_loop_content="" : m_looptag=""
m_TplPath="./" : m_SetTplPath=false
tagData = 없음 설정: loopData = 없음 설정
End Sub
공용 속성 Get ClassName
클래스명 = m_ClassName
끝 속성
공용 속성 버전 가져오기
버전 = m_Version
최종 속성
공공 재산 저작권 얻기
저작권 = m_Copyright
끝 속성
Rem은 템플릿에 이 태그가 포함되어 있는지 여부를 결정하는 템플릿 클래스의 기본 속성입니다.
공개 기본 속성 태그 가져오기(tagname)
태그 = InStr(m_content,"{$" & 태그 이름 & "$")>0
끝 속성
Rem은 정의된 할당 함수를 호출합니다. 이 속성은 할당 작업을 단순화하는 데 사용됩니다.
공용 속성 Let 태그(tagname,replaceString)
호출 할당(tagname,replaceString)
끝 속성
공용 속성 TplPath 가져오기
TplPath = m_TplPath
End Property
Rem은 템플릿 파일의 경로를 설정합니다.
공용 속성 Let TplPath(sTplPath)
sTplPath<>""이면 m_TplPath = sTplPath
If Right(m_TplPath,1)<>"/" 그러면 m_TplPath = m_TplPath & "/"
끝 속성
전용 함수 LoadFromFile(sFilePath,sCharset)
LoadFromFile=false
희미한 oStream
oStream=Server.CreateObject("ADODB.Stream") 설정
oStream.Type=2
oStream.Mode=3
oStream.Open
oStream.Charset=sCharset
oStream.Position=oStream.Size
oStream.LoadFromFilesFilePath
LoadFromFile=oStream.ReadText
oStream.Close
oStream=아무것도 설정하지 않음
끝 함수
개인 함수 FileExist(filespec)
오류 발생 시 다음 재개
파일존재=거짓
Dim oFSO : oFSO = Server.CreateObject("Scripting.FileSystemObject")로 설정
FileExist=oFSO.FileExists(파일 사양)
oFSO=아무것도 설정하지 않음
End Function
Rem은 루프 블록을 가져옵니다.
개인 함수 GetTmpStr(tplstr,tagname,attname)
희미한 정규식, 일치, 일치
regEx = 새 RegExp 설정
regEx.Pattern = "<" & 태그 이름 & ".*?s+name=[""|']?" & attname & "[""|']?.*?>([s S.]*?)</" & 태그 이름 & ">"
regEx.Global = 거짓
regEx.IgnoreCase = 참
일치 항목 설정 = regEx.Execute(tplstr)
경기의 각 경기에 대해
GetTmpStr=Match.Value
다음
regEx = 없음 설정
End Function
Rem은 HTML 태그를 제거합니다.
개인 함수 RemoveTag(tagString,tagname)
희미한 정규식
regex=New RegExp 설정
regEx.Pattern = "<[/]?" & 태그 이름 & ".*?>"
regEx.Global = 참
regEx.IgnoreCase = 참
RemoveTag = regEx.Replace(tagString,"")
정규식=아무것도 설정하지 않음
End Function
Rem 빈 줄 제거
개인 함수 RemoveSpace(tagString)
희미한 정규식
regex=New RegExp 설정
regEx.Pattern = "ns*r"
regEx.Global = 참
regEx.IgnoreCase = 참
RemoveSpace = regEx.Replace(tagString,"")
정규식=아무것도 설정하지 않음
End Function
Rem은 템플릿 파일을 읽고, 중첩된 템플릿을 동시에 처리하고, 템플릿을 병합합니다.
공용 함수 LoadTpl(tplfile)
tplfile=Server.MapPath(tpl파일)
FileExist(tplfile)가 아닌 경우
Response.Write "템플릿 파일 로드에 실패했습니다!"
응답.종료
종료 기능
종료 조건
m_content=LoadFromFile(tplfile,"GB2312")
Dim regEx,일치,일치,fname,sContent
regEx = 새 RegExp 설정
regEx.Pattern = "{$include:(.*?)$}"
regEx.Global = 참
regEx.IgnoreCase = 참
일치 항목 설정 = regEx.Execute(m_content)
경기의 각 경기에 대해
fname=Match.SubMatches(0)
fname=Server.MapPath(m_TplPath & fname)
FileExist(fname)이면
sContent=LoadFromFile(fname,"GB2312")
m_content=replace(m_content,Match.value,sContent)
종료 조건
다음
regEx = 없음 설정
End Function
Rem 할당 대체 기능
공용 함수 할당(tagname,replaceString)
tagname=""이면 함수 종료
루프 레이블인 경우 Rem
InStr(태그 이름,"/")>0 및 InStr(태그 이름,"/")<Len(태그 이름) 그러면
Rem은 루프 레이블 이름을 얻습니다.
m_curLooptag=왼쪽(태그 이름,InStrRev(태그 이름,"/")-1)
m_Looptag=""이면
Rem 루프 라벨이 처음 감지되면 루프에 필요한 변수의 초기값을 설정합니다.
m_looptag=m_curLooptag : m_loop_content=""
m_looptmp=GetTmpStr(m_content,"loop",m_Looptag)
또 다른
m_LoopTag<>m_curLooptag이면
Rem 루프 레이블이 변경되면 초기 루프 변수
m_content=교체(m_content,m_looptmp,m_loop_content)
m_looptag=m_curLooptag : m_loop_content=""
m_looptmp=GetTmpStr(m_content,"loop",m_Looptag)
종료 조건
종료 조건
If Not(loopData.Exists(tagname)) Then loopData.Add tagname,replaceString
또 다른
렘 공통 라벨
tagData.태그 이름 추가,문자열 교체
종료 조건
End Function
Rem은 블록 내 교체를 수행합니다.
공용 함수 Flush()
loopdata.count>0이면
나는 어둡다
chgtmp=태그 제거(m_looptmp,"루프")
arrtag=loopData.keys
도착=loopData.items
i=0의 경우 loopData.count-1로
chgtmp=replace(chgtmp,"{$" & arrtag(i) & "$}",arrval(i))
다음
Rem은 블록의 데이터를 변수에 저장합니다.
m_loop_content=m_loop_content & chgtmp
loopdata.RemoveAll
다음과 같은 경우 종료
End Function
Rem 빌드, 템플릿 최종 교체 완료
공용 함수 Bulid()
m_content=교체(m_content,m_looptmp,m_loop_content)
arrtag=tagData.keys
도착=tagData.items
i=0의 경우 tagData.count-1로
m_content=replace(m_content,"{$" & arrtag(i) & "$}",arrval(i))
다음
m_Content=RemoveSpace(m_Content)
응답.m_Content 쓰기
종료 함수
종료 클래스
%>
상위 템플릿 템플릿 코드(default.tpl):
프로그램 코드
{$include:head.tpl$}
<h1 align=center>{$doc_title$}</h1>
<h3>{$news_title$}</h3>
<ul>
<루프 이름="뉴스">
<Li style="color:#F00">뉴스 제목: {$news/title$}--저자: {$news/author$}</Li>
</loop>
</ul>
<h3>{$lastest_news$}</h3>
<ul>
<!-- 여기서 루프에 포함된 bing 및 count는 테스트용이므로 실제로 사용할 때는 삭제하시기 바랍니다. -->
<loopbind="id" name=arts count="15">
<Li>기사 제목: {$arts/title$}--저자: {$arts/author$}</Li>
</loop>
</ul>
{$include:foot.tpl$}
중첩된 하위 템플릿(head.tpl):
프로그램 코드
<title>{$doc_title$}</title>
중첩된 하위 템플릿(foot.tpl):
프로그램 코드
<p align=center>저작권: DevJS.Com</p>
호출 코드(default.asp):
프로그램 코드
<!--#include 파일="function/template.asp"-->
<%
Rem 템플릿 클래스 사용 예
Set tp = new Template
tp.tplpath="tpl"
tp.LoadTpl(tp.tplpath & "default.tpl")
tp.sign "doc_title","템플릿 메커니즘의 예"
tp.할당 "news_title","국내 뉴스"
i=0 ~ 2인 경우
call tp.ass("arts/title","금융 위기로 인해 많은 수의 실업자가 발생했습니다.")
tp.ass("arts/author","NetEase")를 호출하세요.
tp.플러시
다음
tp.sign "lastest_news","최신 기사"
Rem은 여기서 다른 할당 방법을 사용합니다.
i=0 ~ 2인 경우
tp("news/title")="정부의 좋은 소식이 주식시장 부양에 도움이 될 것입니다"
tp("news/author")="소후"
tp.플러시
다음
tp.bulid
tp = 아무것도 설정하지 않음
%>
이 기사는 shaoyun의 블로그 http://www.devjs.com/ , 원본 주소: http://www.devjs.com/post/asp-template-class.html 에서 가져온 것입니다.