存档
ASP模板技术探讨之关联变量。
先看可实现的效果:
访问变量,需要与ASP结合
关联变量:支持关联的变量
{$#关联名#}
Assgin #关联名#,#变量#
{$#关联名#}
{$#关联名#.#索引#}
Assgin #关联名#,Array(“123″)
{$#关联名#.0}
{$#关联名#.#索引#.#索引#}
Assgin #关联名#,Array(Array(“123″))
{$#关联名#.0.0}
{$#关联名#.#索引#…..#索引#}
Assgin #关联名#,Array(Arr..ay(“123″)))
{$#关联名#.0…0}
{$#关联名#.#Directionary.Key#}
Assgin #关联名#,#DirectionaryName#
{$#关联名#.#Directionary.Key#}
<%
Dim outHtml
outHtml = "xxx" ‘加载模板
function Assign(t,n)
if isArray(n) then
for x=0 to ubound(n)
Assign t&"."&x,n(x)
next
elseif isobject(n) then
for each x in n
Assign t&"."&x,n.item(x)
next
else
if isnull(n) then
outHtml=replace(outHtml,"{$"&t&"}","")
else
outHtml=replace(outHtml,"{$"&t&"}",n)
end if
end if
end function
%>
又好久没有更新日志了,上次谈到将工作用的脚本换成php,现在发现这是一个非常非常明智的选择。
在Linux也可以直接用php当作脚本,处理工作的事情。也算是“跨平台脚本”咯~~~
今天说一下JS压缩,呵呵,这种工具我可写不出来,但是网上牛人已经帮我们写出了相应的类:JavaScriptPacker(http://creativecommons.org/licenses/LGPL/2.1/)
我们直接调用就可以咯,比如将test_resource.js压缩成test.js。
<?php
#demo.php
require_once ‘class.JavaScriptPacker.php’;
$packer = new JavaScriptPacker(file_get_contents("./test_resource.js"), ‘Normal’, true, false);
file_put_contents("./test.js",$packer->pack());
?>
直接 php demo.php
想下一个CentOS玩玩,在线太慢,想到局域网内有个公共文件共享的服务器,开了ftp。
所处于一个超级内部局域网。我的机器ip为10.1.0.175,公共数据存储在10.0.0.254。用FlashFxp拉下来,速度很快,竟然能达到8MB。但是到数据2G的时候,就停止了。难道FlashFxp传输超过2g文件不可以吗?
在网上找到很久,也没有找到解决办法,忽然想到了Windows自带了一个ftp。连上去,一会就下载完了。还是Windows自带的好哦。
当PHP.ini设置register_globals = On是,通过GET提交的数据可以直接使用表单名调用GET提交的数据。asp就不可以,我想到了asp的execute,也谢了一个脚本,还能过滤SQL注入字符串
<%
Dim myRegExp
set myRegExp=New RegExp
myRegExp.Pattern = "[^a-z0-9_]"
myRegExp.Global=True
for each Req in Request.Querystring
ReqV=Request.Querystring(Req)
if trim(ReqV)<>"" then
ReqV=replace(ReqV,"""","""""")
Req=myRegExp.Replace(Req,"")
Execute(Req&"="""&ReqV&"""")
end if
next
response.write a
%>
调用很简单。比如GET提交/get_Test.asp?a=111&b=222
则直接可以使用Response.write a,输出结果为111。简单吧~
再次感谢小秦(Q48080163)提出的bug
本文只提供思路,程序代码在此就不方便发布了~
第一:每个程序代码都不样
第二:不能随便公布客户的代码~呵呵
如有类似需求,可联系QQ:1301425789
可以看到现在首页的执行时间已经是1.8秒以上了,如果访问量太大,有可能就会导致耗资源,加入缓存是最好的解决方法。我设置的数据库表如下:
Cache_id
Cache_key
Cache_Content
Cache_LastCreate
自动编号
缓存关键字
缓存内容
最后生成日期
设计缓存的时候,主要需要考虑以下两点:
1) 不经常改动部分缓存数据同步
保持缓存同步有两种方法:设置缓存刷新频率、实时更新
设置缓存刷新频率
<%
缓存关键字:http://www.aaa.com/cp_view.asp?ID=68727
更 新 频率:1天
到 期 日期:最后生成日期+更 新 频率
Sql:select Cache_Content from CacheTable where Cache_key=缓存关键字 and Cache_LaseCreate<到期日期
没有找到记录:{
将页面数据保存到数据库
select * from CacheTable where Cache_key=缓存关键字
没有记录{插入记录}有记录{更新生成日期,并保存记录}
}找到记录:{
直接输出
}
%>
实时更新
这种有点麻烦,但是是一个比较好的方案。唯一的缺点是保存的时候需要多次操作数据库。以 市场页为例:
给市场数据库添加一个最后更新日期
数据添加页面:凡是该分类下的所有页面更新,均更新最后更新日期。
最终显示页面:多表查询,如果当前市场最后更新日期<缓存日期,并且有缓存则直接输出缓存,否则创建缓存并输出。
2) (经常改动不废)非静态的部分
这个比较简单,主要是会员登录,ASP脚本判断状态,输出JS更改页面的动态部分
因为工作需要,经常需要操作数据转换的工作。比如:从dz导入到pw,或从新云导入到5ucms,把数据从这个表导入到那个表。操作的多了,认为自己对数据库转化还是有一定的研究的,今天写出了,希望能对做同样工作的朋友一些帮助或者启发。
一般我完成数据库转换的脚本选择vbscript。原因吗,简单当然是一个很重要的因素,更重要的常用的数据库(如:MySQL)都有ADO的驱动。
数据库转化第一步,先要确定目的数据库的类型和当前数据库的类型。如果access数据库转换成mysql数据库。则需要先去下载MySQL ADO的驱动。
第二步,连接好数据库了,现在要分析数据库对应的字段之间的关系。如果能把需要操作的数据表的字段导出来应该能快很多。既然选择了vbscript脚本,我们就让他来帮忙。
‘Auth:猫七(Miaoqiyuan.cn)
‘outTableCol(表名)
‘Desc:返回某表的所有字段
function outTableCol(tbl)
tablesCol=""
set rs=createobject("ADODB.Recordset")
rs.open "select top 1 * from "&tbl,conn,1,1
for i=0 to rs.fields.count-1
tablesCol=tablesCol & rs.fields(i).name & ","
next
outTableCol=tablesCol
rs.close
set rs=nothing
end function
直接使用Wscript.echo outTableCol(表名),哈哈,表明全输出来了(最好将vbscript的脚本宿主改成cscript)。
第三步,字段的对应关系分析好了,自然要进入实质性的过程了-插入数据。
insert into 语句?No,我们用ADODB.Recordset。使用MySQL数据库的使用ADODB也可以使用哦,这也是我使用vbscript的另一个原因,vbscript对ado的兼容性不用我说了吧。。。确定了用ADODB.Recordset,写这种Rs(..)=Rs(..)的方式也是挺麻烦的,现在我们再次请vbscript出山。
‘Auth:猫七(Miaoqiyuan.cn)
‘CreateRsStr(字段名,用’,'分隔,两个字段间的转换用=>)
‘例如:
‘CreateRsStr "d_id,d_dme" #Rs1("d_id")=Rs2("d_id")
‘CreateRsStr "d_id=>c_id" [...]