|
技术资料 > ASP技术 > ASP技巧 : 老外的代码分离办法 |
老外的代码分离办法 March 25,2004 |
index.asp
-----------------------------------------------------------------------
<!--#include file="templateclass.asp"-->
<%
' This is the code used to load and display the template.
' See how clean it is!!! :)
sub go()
dim oTemplate
set oTemplate = new template
with oTemplate
.usetemplate("message.tpl")
.tag("date") = Date()
.tag("self") = "<div style='background:#dddddd'>" & .gettemplate("message.tpl",true) & "</div>"
.tag("aspcode") = .gettemplate("index.asp",false)
.tag("howtouse") = .gettemplate("howtouse.tpl",false)
.display()
end with
set oTemplate = nothing
end sub
go()
%>
templateclass.asp
------------------------------------------------------------------------
<%
' This is the template object. It allows the creation, reading
' and editing of templates on the server.
' CREATED BY: Christopher Brown-Floyd
' DATE: November 3, 1999
class template
' This variable stores the template
private mytemplate 'as string
' This method gets a template from the server and returns
' the whole file as a string.
public function gettemplate(pathfilename,encodetohtml) 'as string
dim oFSO 'as object
dim oTemplate 'as object
dim temptemplate 'as string
' Open type for the template(read-only)
const forreading = 1,boolcreatefile = false
if IsNull(encodetohtml) or encodetohtml = "" or encodetohtml = false then
encodetohtml = false
else
encodetohtml = true
end if
on error resume next
' Create filesystemobject
set oFSO = server.createobject("scripting.filesystemobject")
' Create template object
set oTemplate = oFSO.opentextfile(server.mappath(pathfilename),forreading,boolcreatefile)
if err <> 0 then
err.clear
exit function
end if
' Get the whole file as a string
temptemplate = oTemplate.readall
' Encode template to HTML?
if encodetohtml then
gettemplate = tohtml(temptemplate)
else
gettemplate = temptemplate
end if
' Close the template
oTemplate.close
' Free the server resources
set oTemplate = nothing
set oFSO = nothing
end function
' This procedure gets and stores a template
public sub usetemplate(pathfilename)
thistemplate = gettemplate(pathfilename,false)
end sub
' This property replaces tags with the user's template
public property let tag(tagname,userstring)
dim ld, rd 'as string
dim temptag 'as string
dim tagstart, tagend 'as integer
ld = "<!--"
rd = "-->"
tagstart = 1
do while tagstart > 0 and tagstart < len(thistemplate)
tagstart = instr(tagstart,thistemplate,ld)
if tagstart > 0 then
tagend = instr(tagstart,thistemplate,rd)
if tagend > (tagstart + 3) then
temptag = mid(thistemplate,tagstart + 4,tagend-(tagstart+4))
if (trim(temptag) = tagname) or (temptag = tagname) then
if IsNull(userstring) then
thistemplate = replace(thistemplate,ld & temptag & rd,"")
else
thistemplate = replace(thistemplate,ld & temptag & rd,userstring)
end if
exit do
else
tagstart = tagstart + 4
end if
end if
end if
loop
end property
public sub removeTags()
dim ld, rd 'as string
dim temptag 'as string
dim tagstart, tagend 'as integer
ld = "<!--"
rd = "-->"
tagstart = 1
do while tagstart > 0 and tagstart < len(thistemplate)
tagstart = instr(tagstart,thistemplate,ld)
if tagstart > 0 then
tagend = instr(tagstart,thistemplate,rd)
if tagend > (tagstart + 3) then
temptag = mid(thistemplate,tagstart + 4,tagend-(tagstart+4))
thistemplate = replace(thistemplate,ld & temptag & rd,"")
tagstart = tagend
end if
end if
loop
end sub
' This property allows the user to assign the current template
public property let thistemplate(template_as_string)
if vartype(template_as_string) = vbstring _
or vartype(template_as_string) = vbnull then
mytemplate = template_as_string
end if
end property
' This property returns the current template
public property get thistemplate() 'as string
thistemplate = mytemplate
end property
' This subroutine displays the current template
public sub display()
response.write thistemplate
end sub
' This subroutine encodes the current template to HTML
public sub htmlencode()
tohtml(thistemplate)
end sub
' This procedure saves the current template to the server
public sub saveas(pathfilename)
dim oFSO 'as object
dim oTemplate,oBackup 'as object
dim strTruePath 'as string
' Open type for the template(read-only)
const forreading = 1,forwriting = 2,boolcreatefile = true
on error resume next
' Create filesystemobject
set oFSO = server.createobject("scripting.filesystemobject")
' Create template object
strTruePath = server.mappath(pathfilename)
if oFSO.fileexists(strTruePath) then
oFSO.copyfile strTruePath, strTruePath & ".bak", true
end if
set oTemplate = oFSO.opentextfile(strTruePath,forwriting,boolcreatefile)
if err <> 0 then
err.clear
exit sub
end if
' Write the whole template to the server
oTemplate.write thistemplate
' Close the template
oTemplate.close
' Free the server resources
set oTemplate = nothing
set oFSO = nothing
end sub
' This function encodes text to html
private function tohtml(temptemplate)
temptemplate = replace(temptemplate,"<","<")
temptemplate = replace(temptemplate," "," ")
temptemplate = replace(temptemplate,vbcrlf,"<br />")
tohtml = temptemplate
end function
' This procedure clears the variable that the current template
' is stored in when the object is created.
private sub class_initialize()
mytemplate = ""
end sub
' This procedure clears the variable that the current template
' is stored in when the object is terminated.
private sub class_terminate()
set mytemplate = nothing
end sub
end class
%>
howtouse.tpl
------------------------------------------------------------------------
<h3>Object's properties:</h3>
<div style="background:#dddddd"><p><b>thistemplate</b> = <i>String</i>
Loads a dynamically built template into the template object. Use this method
when there isn't a file to read from.</p></div>
<h3>Object's procedures:</h3>
<div style="background:#dddddd"><p><b>tag(<i>tag name as string</i>)</b> = <i>String</i>
Replaces all occurrences of a tag within the current template with the specified string.</p>
<p><i>variable</i> = <b>gettemplate(<i>path as string</i>,<i>[encode to html] as boolean</i>)</b>
Returns the template from the specified path; however, it isn't loaded into the object.</p></div>
<h3>Object's methods:</h3>
<div style="background:#dddddd"><p><b>usetemplate(<i>path as string</i>)</b>
Loads the template from the specified path into the object.</p>
<p><b>htmlencode()</b>
Encodes the current template loaded into HTML.</p>
<p><b>display()</b>
Writes the current template to the user's browser.</p>
<p><b>removetags()</b>
Removes all tags that haven't been replaced.</p>
<p><b>saveas(<i>path as html</i>)</b>
Saves the current template to the specified path. Use this method when you
want to save the changes made to the template.
NOTE: If a file of the same name exists at the specified path, ".bak" will be
added to the end of its name; thus "myfile.tpl" would become "myfile.tpl.bak".</p></div>
</div>
message.tpl
------------------------------------------------------------------------
<html>
<body>
<pre>
This is an example of how to use my template class.
Dynamic data for your template can come from anywhere.
It can come from a built-in ASP function: <!--date-->
It can come from a file:
<!--self-->
You can even use it as an online source editing tool for your ASP code:
<form><textarea cols="80" rows="30"><!--aspcode--></textarea></form>
<!--howtouse-->
NOTE: Templates can't have any ASP code in them. It'll only process HTML.
This is good practice, because it produces cleaner code and HTML.
</pre>
</body>
</html>
希望能对你有所帮助!
|
|