Coldfusion动态URL

时间:2011-12-28 21:11:42

标签: coldfusion coldfusion-8

我需要根据我从数据库中获取的两个字段构建动态网址。 第一个字段是mainCategory,第二个字段是subCategory。

正在构建的网址类似于http://mydomain.com/cars/ford

由于mainCategory和subCategory是动态的,我不确定代码需要什么 显示在页面上以便工作。

2 个答案:

答案 0 :(得分:0)

严重过于简化的答案可能是这样的:

<cfquery name="getCats" datasource="dsn">
SELECT mainCategory, subCategory
FROM myTable
</cfquery>

<cfset newURL = "http://mydomain.com/cars/ford/mainCategory/#getCats.mainCategory#/subCategory/#getCats.subCategory#" />

在此示例中,使用名为“getCats”的基本CFQUERY从数据库表'myTable'中选择两列。假设有结果,那么这两个值将被注入到URL中,我们将其保存到名为“newURL”的变量中,以便在代码中的其他位置使用。

这个例子实际上只能用作一般准则;在您的问题中有许多其他假设需要解决(例如,数据库,表格,DSN,用户实际访问该URL的方式等),这些假设未在本答复的范围内解决。

答案 1 :(得分:0)

有几种方法可以做到这一点。您可以在Web服务器上使用URL重写

http://mydomain.com/cars/ford

http://mydomain.com/index.cfm?mainCategory=cars&subCategory=ford

但如果您不介意将index.cfm放在URL中,您也可以在ColdFusion中执行此操作:

http://mydomain.com/index.cfm/cars/ford

如果你想在ColdFusion中执行它,“index.cfm”之后的文本被放入一个名为path_info的cgi变量中,你可以这样解析出来:

<cfset mainCategory = "" />
<cfset subCategory = "" />

<cfset pathInfoString = reReplaceNoCase( trim( cgi.path_info ), ".+\.cfm/? *", "" ) />
<cfset pathInfoArray = listToArray( pathInfoString, "/" ) />

<cfif arrayLen( pathInfoArray ) gte 1>
    <cfset mainCategory = pathInfoArray[ 1 ] />
</cfif>
<cfif arrayLen( pathInfoArray ) gte 2>
    <cfset subCategory = pathInfoArray[ 2 ] />
</cfif>

您可以使用listGetAt()而不是将其转换为数组,我更喜欢对列表操作执行数组操作。 reReplaceNoCase()已完成,因为我认为在某些情况下文件名被添加到路径信息的开头,但如果没有为您发生,则可能不需要。