经典 ASP 呈现模板并发送变量

Classic ASP render a template and send variables

我有一个经典的 ASP 页面,我需要为 table 上的每一行创建一个循环,然后创建一个 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 个变量持有者的模板并将文章名称和标题发送到模板,然后将其保存到磁盘?

谢谢。

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

您的模板应该是 fully-formed html 页面,但标题和文章具有占位符值。占位符必须是唯一的,因此 [[[~~~Title~~~]]] 或类似的序列不会出现在您的实际标题、文章或模板本身中。

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

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

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

早在我创建 KudzuASP 模板引擎的那一天,就是为了解决 Classic ASP 中这个相当复杂的缺陷。在 KudzuASP 中,您可以有 ASP 个完全没有 HTML 的代码页。

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

简而言之,您创建模板引擎的一个实例,设置一些变量,安装自定义代码对象,然后调用它,然后模板引擎读取您的模板并在何时何地回调到您的 ASP 页面合适的。它有一个库系统,因此您可以通过代码或放置在 HTML 模板中的标签加载自定义标签 handlers/components 的库。

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

您可以在此处 KudzuASP 找到该项目仍在维护的地方。