我需要根据我从数据库中获取的两个字段构建动态网址。 第一个字段是mainCategory,第二个字段是subCategory。
正在构建的网址类似于http://mydomain.com/cars/ford
由于mainCategory和subCategory是动态的,我不确定代码需要什么 显示在页面上以便工作。
答案 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/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()已完成,因为我认为在某些情况下文件名被添加到路径信息的开头,但如果没有为您发生,则可能不需要。