2011-12-28 53 views
1

我需要建立一个基于我从我的数据库中获取的两个字段的动态url。 第一个字段是mainCategory,第二个字段是subCategory。Coldfusion动态URL

的网址正在建设看起来像http://mydomain.com/cars/ford

由于mainCategory和子类别是动态的,我不知道是什么代码需要 页面上出现的这个工作。

+0

你能澄清你的问题的几个部分吗? 汽车是mainCategory和ford子类吗? 您是否在问如何构建该链接,或者当有人尝试使用它时如何获取值? – 2011-12-28 21:36:14

+0

如何在有人尝试使用它时返回值。这是我的困境。 – user1068270 2011-12-28 21:40:03

+0

对于它的价值,通常称为“搜索引擎安全”URL。网络搜索“[ses url coldfusion](http://www.google.com/search?q=ses+url+coldfusion)”应该提供许多其他资源。 – ale 2011-12-29 13:40:33

回答

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的”。假设有结果,将这两个值注入到我们保存到一个名为“newURL”的变量中的URL中,以用于代码中的其他地方。

这个例子实际上只能用作一般的指导原则;在您的问题中还没有阐明需要解决的许多其他假设(例如,数据库名称,表格,DSN,用户实际访问该URL的方式等),但在此答案的范围内未涉及。

+0

谢谢肖恩,但我想我需要回答的真正问题是如何使用这种动态网址发送给第三方用户,以便他们可以看到相同的结果。所以,我想我需要以某种方式解剖或拉动汽车和福特的网址,并将其与桌面进行比较。这是一个选择吗? – user1068270 2011-12-28 21:34:59

+0

现在我们正在某个地方。您需要a)分析/提​​取URL信息 - 这需要您分解/解析位置,b)将这些值转换为适用于您的特定系统的信息(即。将任意第三方网址变量映射到代表相同业务对象的* your *特定变量,以及c)将这些值传递到上述的CFQUERY中,这将允许您构建更符合您需求的动态URL。同样,您还缺少将该URL *返回给用户的部分,并且可悲的是,需要更多关于该应用程序的知识。 – 2011-12-28 21:42:55

0

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

http://mydomain.com/cars/ford

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

但你也可以做到这一点ColdFusion的,如果你不介意index.cfm的是URL像这样:

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

如果你想这样做的ColdFusi在“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()完成了,因为我认为在某些情况下文件名被添加到路径信息的开始,但如果它没有为你发生,你可能不需要。

+0

是的,这似乎是我所需要的。将http://mydomain.com/cars/ford转换成我可以将其与表格进行比较的方式,以便它可以显示Cars和Ford的所有结果。我只是使用你发布的代码和cfoutput mainCategory和subCategory,但它什么都没有返回。只是空白。 – user1068270 2011-12-28 22:02:00

+0

我在发布之前已经在ColdFusion 9中测试了这个,但我并不认为那里有任何CF9特定的东西。我在temp.cfm中使用了代码,并使用了temp.cfm/cars/ford。 如果你转储出pathInfoArray或pathInfoString你会得到一个值吗? – 2011-12-28 22:24:25

+0

哎呀,冷聚变7. – user1068270 2011-12-28 23:08:08