分享一個(gè)好東東,動態(tài)Include文件 (Dynamic File Includes)
更新時(shí)間:2008年05月18日 21:16:09 作者:
相信很多ASP開發(fā)者都會抱怨ASP的Include方式太老土了,以的方式加載文件實(shí)在是太不舒服了,在實(shí)際項(xiàng)目中不管我是不是一開始就要用到這個(gè)文件,我總得早早的把它Include進(jìn)來...這方面PHP就舒服很多...什么時(shí)候用,什么時(shí)候In...
早在03年就在藍(lán)色理想上看到過動態(tài)Include的文章,當(dāng)時(shí)已經(jīng)覺得很厲害,但實(shí)際應(yīng)用了一下,不方便而且Include的效果不好.
后來又在一網(wǎng)站上看到了改進(jìn)版的,但是也不太好用~~~
哎,當(dāng)時(shí)我真是覺得有點(diǎn)想放棄ASP了,但是由于公司還是用ASP來開發(fā),我也是沒有辦法...
今天,我一定要記住今天~~~在國外的一個(gè)網(wǎng)站上我竟然發(fā)現(xiàn)了這樣一個(gè)好東東,太棒了~~~Great works!!!
以前試的一些動態(tài)Include代碼,都無法Include一個(gè)類,甚至函數(shù)~~~又或者Include文件中的Include無法被包含...
現(xiàn)在這個(gè)鬼佬(dselkirk)寫的類可以為我們做到這些了~~~
<%
public include, include_vars
set include = new cls_include
class cls_include
private sub class_initialize()
set include_vars = server.createobject("scripting.dictionary")
end sub
private sub class_deactivate()
arr_variables.removeall
set include_vars = nothing
set include = nothing
end sub
public default function include(byval str_path)
dim str_source
if str_path <> "" then
str_source = readfile(str_path)
if str_source <> "" then
processincludes str_source
convert2code str_source
formatcode str_source
if str_source <> "" then
if request.querystring("debug") = 1 then
response.write str_source
response.end
else
executeglobal str_source
include_vars.removeall
end if
end if
end if
end if
end function
private sub convert2code(str_source)
dim i, str_temp, arr_temp, int_len
if str_source <> "" then
if instr(str_source,"%" & ">") > instr(str_source,"<" & "%") then
str_temp = replace(str_source,"<" & "%","|%")
str_temp = replace(str_temp,"%" & ">","|")
if left(str_temp,1) = "|" then str_temp = right(str_temp,len(str_temp) - 1)
if right(str_temp,1) = "|" then str_temp = left(str_temp,len(str_temp) - 1)
arr_temp = split(str_temp,"|")
int_len = ubound(arr_temp)
if (int_len + 1) > 0 then
for i = 0 to int_len
str_temp = trim(arr_temp(i))
str_temp = replace(str_temp,vbcrlf & vbcrlf,vbcrlf)
if left(str_temp,2) = vbcrlf then str_temp = right(str_temp,len(str_temp) - 2)
if right(str_temp,2) = vbcrlf then str_temp = left(str_temp,len(str_temp) - 2)
if left(str_temp,1) = "%" then
str_temp = right(str_temp,len(str_temp) - 1)
if left(str_temp,1) = "=" then
str_temp = right(str_temp,len(str_temp) - 1)
str_temp = "response.write " & str_temp
end if
else
if str_temp <> "" then
include_vars.add i, str_temp
str_temp = "response.write include_vars.item(" & i & ")"
end if
end if
str_temp = replace(str_temp,chr(34) & chr(34) & " & ","")
str_temp = replace(str_temp," & " & chr(34) & chr(34),"")
if right(str_temp,2) <> vbcrlf then str_temp = str_temp
arr_temp(i) = str_temp
next
str_source = join(arr_temp,vbcrlf)
end if
else
if str_source <> "" then
include_vars.add "var", str_source
str_source = "response.write include_vars.item(""var"")"
end if
end if
end if
end sub
private sub processincludes(str_source)
dim int_start, str_path, str_mid, str_temp
str_source = replace(str_source,"<!-- #","<!--#")
int_start = instr(str_source,"<!--#include")
str_mid = lcase(getbetween(str_source,"<!--#include","-->"))
do until int_start = 0
str_mid = lcase(getbetween(str_source,"<!--","-->"))
int_start = instr(str_mid,"#include")
if int_start > 0 then
str_temp = lcase(getbetween(str_mid,chr(34),chr(34)))
str_temp = trim(str_temp)
str_path = readfile(str_temp)
str_source = replace(str_source,"<!--" & str_mid & "-->",str_path & vbcrlf)
end if
int_start = instr(str_source,"#include")
loop
end sub
private sub formatcode(str_code)
dim i, arr_temp, int_len
str_code = replace(str_code,vbcrlf & vbcrlf,vbcrlf)
if left(str_code,2) = vbcrlf then str_code = right(str_code,len(str_code) - 2)
str_code = trim(str_code)
if instr(str_code,vbcrlf) > 0 then
arr_temp = split(str_code,vbcrlf)
for i = 0 to ubound(arr_temp)
arr_temp(i) = ltrim(arr_temp(i))
if arr_temp(i) <> "" then arr_temp(i) = arr_temp(i) & vbcrlf
next
str_code = join(arr_temp,"")
arr_temp = vbnull
end if
end sub
private function readfile(str_path)
dim objfso, objfile
if str_path <> "" then
if instr(str_path,":") = 0 then str_path = server.mappath(str_path)
set objfso = server.createobject("scripting.filesystemobject")
if objfso.fileexists(str_path) then
set objfile = objfso.opentextfile(str_path, 1, false)
if err.number = 0 then
readfile = objfile.readall
objfile.close
end if
set objfile = nothing
end if
set objfso = nothing
end if
end function
private function getbetween(strdata, strstart, strend)
dim lngstart, lngend
lngstart = instr(strdata, strstart) + len(strstart)
if (lngstart <> 0) then
lngend = instr(lngstart, strdata, strend)
if (lngend <> 0) then
getbetween = mid(strdata, lngstart, lngend - lngstart)
end if
end if
end function
end class
%>
后來又在一網(wǎng)站上看到了改進(jìn)版的,但是也不太好用~~~
哎,當(dāng)時(shí)我真是覺得有點(diǎn)想放棄ASP了,但是由于公司還是用ASP來開發(fā),我也是沒有辦法...
今天,我一定要記住今天~~~在國外的一個(gè)網(wǎng)站上我竟然發(fā)現(xiàn)了這樣一個(gè)好東東,太棒了~~~Great works!!!
以前試的一些動態(tài)Include代碼,都無法Include一個(gè)類,甚至函數(shù)~~~又或者Include文件中的Include無法被包含...
現(xiàn)在這個(gè)鬼佬(dselkirk)寫的類可以為我們做到這些了~~~
復(fù)制代碼 代碼如下:
<%
public include, include_vars
set include = new cls_include
class cls_include
private sub class_initialize()
set include_vars = server.createobject("scripting.dictionary")
end sub
private sub class_deactivate()
arr_variables.removeall
set include_vars = nothing
set include = nothing
end sub
public default function include(byval str_path)
dim str_source
if str_path <> "" then
str_source = readfile(str_path)
if str_source <> "" then
processincludes str_source
convert2code str_source
formatcode str_source
if str_source <> "" then
if request.querystring("debug") = 1 then
response.write str_source
response.end
else
executeglobal str_source
include_vars.removeall
end if
end if
end if
end if
end function
private sub convert2code(str_source)
dim i, str_temp, arr_temp, int_len
if str_source <> "" then
if instr(str_source,"%" & ">") > instr(str_source,"<" & "%") then
str_temp = replace(str_source,"<" & "%","|%")
str_temp = replace(str_temp,"%" & ">","|")
if left(str_temp,1) = "|" then str_temp = right(str_temp,len(str_temp) - 1)
if right(str_temp,1) = "|" then str_temp = left(str_temp,len(str_temp) - 1)
arr_temp = split(str_temp,"|")
int_len = ubound(arr_temp)
if (int_len + 1) > 0 then
for i = 0 to int_len
str_temp = trim(arr_temp(i))
str_temp = replace(str_temp,vbcrlf & vbcrlf,vbcrlf)
if left(str_temp,2) = vbcrlf then str_temp = right(str_temp,len(str_temp) - 2)
if right(str_temp,2) = vbcrlf then str_temp = left(str_temp,len(str_temp) - 2)
if left(str_temp,1) = "%" then
str_temp = right(str_temp,len(str_temp) - 1)
if left(str_temp,1) = "=" then
str_temp = right(str_temp,len(str_temp) - 1)
str_temp = "response.write " & str_temp
end if
else
if str_temp <> "" then
include_vars.add i, str_temp
str_temp = "response.write include_vars.item(" & i & ")"
end if
end if
str_temp = replace(str_temp,chr(34) & chr(34) & " & ","")
str_temp = replace(str_temp," & " & chr(34) & chr(34),"")
if right(str_temp,2) <> vbcrlf then str_temp = str_temp
arr_temp(i) = str_temp
next
str_source = join(arr_temp,vbcrlf)
end if
else
if str_source <> "" then
include_vars.add "var", str_source
str_source = "response.write include_vars.item(""var"")"
end if
end if
end if
end sub
private sub processincludes(str_source)
dim int_start, str_path, str_mid, str_temp
str_source = replace(str_source,"<!-- #","<!--#")
int_start = instr(str_source,"<!--#include")
str_mid = lcase(getbetween(str_source,"<!--#include","-->"))
do until int_start = 0
str_mid = lcase(getbetween(str_source,"<!--","-->"))
int_start = instr(str_mid,"#include")
if int_start > 0 then
str_temp = lcase(getbetween(str_mid,chr(34),chr(34)))
str_temp = trim(str_temp)
str_path = readfile(str_temp)
str_source = replace(str_source,"<!--" & str_mid & "-->",str_path & vbcrlf)
end if
int_start = instr(str_source,"#include")
loop
end sub
private sub formatcode(str_code)
dim i, arr_temp, int_len
str_code = replace(str_code,vbcrlf & vbcrlf,vbcrlf)
if left(str_code,2) = vbcrlf then str_code = right(str_code,len(str_code) - 2)
str_code = trim(str_code)
if instr(str_code,vbcrlf) > 0 then
arr_temp = split(str_code,vbcrlf)
for i = 0 to ubound(arr_temp)
arr_temp(i) = ltrim(arr_temp(i))
if arr_temp(i) <> "" then arr_temp(i) = arr_temp(i) & vbcrlf
next
str_code = join(arr_temp,"")
arr_temp = vbnull
end if
end sub
private function readfile(str_path)
dim objfso, objfile
if str_path <> "" then
if instr(str_path,":") = 0 then str_path = server.mappath(str_path)
set objfso = server.createobject("scripting.filesystemobject")
if objfso.fileexists(str_path) then
set objfile = objfso.opentextfile(str_path, 1, false)
if err.number = 0 then
readfile = objfile.readall
objfile.close
end if
set objfile = nothing
end if
set objfso = nothing
end if
end function
private function getbetween(strdata, strstart, strend)
dim lngstart, lngend
lngstart = instr(strdata, strstart) + len(strstart)
if (lngstart <> 0) then
lngend = instr(lngstart, strdata, strend)
if (lngend <> 0) then
getbetween = mid(strdata, lngstart, lngend - lngstart)
end if
end if
end function
end class
%>
相關(guān)文章
asp中response.write(''中文'')或者js中文亂碼問題
這篇文章主要介紹了asp中response.write('中文')或者js中文亂碼問題,有時(shí)候我們需要輸出js也會出現(xiàn)亂碼,這里給出了幾個(gè)解決方法,需要的朋友可以參考下2020-03-03ASP中使用FileSystemObject時(shí)提高性能的方法
在封裝自己的FileSystemObject庫的時(shí)候,測試的時(shí)候發(fā)現(xiàn)在文件夾或文件很多的時(shí)候,效率很低,顯示一個(gè)文件夾需要2秒甚至更多,這讓我很是奇怪,因?yàn)轱@示文件夾及文件信息的時(shí)候直接都是使用Folder及File對象的屬性,這應(yīng)該不會引起性能上的問題,但是事實(shí)卻說明我的想法過于簡單了。2008-05-05被動式統(tǒng)計(jì)網(wǎng)站在線人數(shù)
被動式統(tǒng)計(jì)網(wǎng)站在線人數(shù)...2006-12-12asp中Scripting.Dictionary字典對象使用示例
這篇文章主要介紹了asp中Scripting.Dictionary字典對象使用示例,本文包含創(chuàng)建、賦值、遍歷、判斷KEY等操作,需要的朋友可以參考下2014-08-08ASP獲取網(wǎng)頁全部圖片地址并保存為數(shù)組的正則
ASP常用函數(shù):getIMG()獲取網(wǎng)頁全部圖片地址并保存為數(shù)組2008-03-03用ASP VBS xmlhttp adodbstream下載和保存圖片的代碼
用ASP VBS xmlhttp adodbstream下載和保存圖片的代碼...2007-03-03