经典ASP渲染模板并发送变量

时间:2015-07-14 21:13:10

标签: asp-classic

我有一个经典的ASP页面,我需要为表格上的每一行创建一个循环,然后创建一个html文档并将其保存到硬盘驱动器,但我想创建一个模板,所以我只是发送两个模板的变量,所以我不必每次都在循环中编写HTML文档。

这是我到目前为止所做的:

SQL = "select Title, Article from [ASPTest].[dbo].[articles]"
  set rs = conn.execute(SQL)
  arrRecs = rs.GetRows
  For row = 0 To UBound(arrRecs, 2) 'Rows
      For col = 0 To UBound(arrRecs, 1) 'Columns
          Response.Write rs.Fields(col).Name & " = " & arrRecs(col, row) & " "
          dim fs,f
          set fs=Server.CreateObject("Scripting.FileSystemObject")
          set f=fs.CreateTextFile("C:\Users\User\Documents\ASP Pages\"+arrRecs(col, row)+".html",true)
          f.write("<html><body><div>It kinda works</div></body></html>")
          f.close
          set f=nothing
          set fs=nothing
      Next
      Response.Write "<br />"
  Next

有没有办法使用具有2个变量持有者的模板,并将文章名称和标题发送到模板,然后将其保存到磁盘?

谢谢。

2 个答案:

答案 0 :(得分:4)

我认为你可以使用存储为文本文件的模板和Replace函数来实现你想要的效果。

您的模板应该是一个完整格式的html页面,但标题和文章的占位符值。占位符必须是唯一的,所以类似于[[[~~~Title~~~]]]或类似的序列,不会出现在您的实际标题,文章或模板本身中。

<html>
<head><title>[[[~~~Title~~~]]]</title></head>
<body>
<h1>[[[~~~Title~~~]]]</h1>
<div id="article">[[[~~~Article~~~]]]</div>
</body>
</html>

在您的代码中,从文件中读取模板并将其存储在变量中。 (所以从技术上讲,你可以把它首先写成一个变量,但是VBScript在字符串连接方面很糟糕......无论如何。获取你的标题数组&amp;文章并通过它循环(虽然只有一次:我不确定你为什么要在你的尝试中循环遍历行和列)。对于每一行,制作模板的副本,将标题占位符替换为当前行的标题,将文章占位符替换为当前行的文章,并将结果写入文件。

Dim template, t
Dim fso, file
Dim rs, conn, SQL
Dim records, row

SQL = "SELECT ID, Title, Article FROM [ASPTest].[dbo].[articles]"
'[...database stuff...]
records = rs.GetRows
'[...close database...]

Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set file = fso.OpenTextFile("path/to/template.txt",1) '- 1 = For reading
template = file.ReadAll
file.Close
Set file = Nothing
For row = 0 to UBound(records,2) 
    t = template
    t = Replace(t,"[[[~~~Title~~~]]]",records(1,row))
    t = Replace(t,"[[[~~~Article~~~]]]",records(2,row))
    Set file = fso.CreateTextFile("path/to/html/" & records(0,row) & ".html")
    file.Write(t)
    file.Close
    Set file = Nothing
Next
Set fso = Nothing

答案 1 :(得分:1)

当天我创建了KudzuASP模板引擎,以解决Classic ASP中相当复杂的缺陷。在KudzuASP中,您可以拥有绝对没有HTML的ASP代码页。

KudzuASP是一个小的包含文件,大约不到1000行代码,可以将您的托管ASP页面转换为模板引擎使用的事件驱动对象。

简而言之,您创建模板引擎的实例,设置一些变量,安装自定义代码对象,然后调用它,之后模板引擎会读取您的模板,并在适当的时间和地点对您的ASP页面进行回调。它有一个库系统,因此您可以通过代码或放置在HTML模板中的标签加载自定义标签处理程序/组件库。

最好的功能之一是,对于那些仍然在经典ASP保护伞下的人来说,它可以使应用程序代码和逻辑100%分离。使用KudzuASP编码经典ASP页面比没有编码更容易,并且由于ASP编译页面的方式,回调是“原生的”并且非常快。

您可以在KudzuASP找到项目仍在维护的位置。