Coldfusion-使用CFSWITCH在页面上隐藏网址的最佳方法?

1 coldfusion coldfusion-8

我想构建一个隐藏URL的框架,我只是在学习CFSW​​ITCH.在数据表中查询导航链接.我试图查询cfswitch并不断收到错误

示例:?category = 5&page = 21(其中category = page_category和5 = page_categoryid,page_id在数据表中为21)

<cfoutput query="pagecategories" group="page_categoryid">
   <cfswitch expression="#URL.category#">
      <cfcase value="21">
         <cfinclude template="../templates/index_welcome.cfm">
      </cfcase>

      <cfcase value="#page_categoryid#">
         <cfinclude template="../templates/page_bycategory.cfm?page_categoryid=#page_categoryid#">
      </cfcase>

      <cfcase value="22">
         <cfinclude template="/modules/blog/">
      </cfcase>
   </cfswitch>
</cfoutput>
Run Code Online (Sandbox Code Playgroud)

Nat*_*ate 8

首先,欢迎来到ColdFusion,它是一种很棒的语言,我想你会喜欢它.:)

你在这里尝试的是一个非常糟糕的主意,出于多种原因,请阅读为什么和一些替代方案.

1)它从你这个开发者那里不必要地混淆了它.相信我,你会在6个月后学会讨厌它,当你回到某些任意变化时,不记得"14"意味着什么.

2)它对搜索引擎不利 - 谷歌SES网址获取更多信息(搜索引擎安全).

3)数字递增键不如描述性文本安全.我可以循环查看数字并查看所有页面,跳过导航并查看所有内容.

4)你没有得到其他方式无法获得的可感知的优势(我将在下面向你展示).

而不是按照你列出的方式进行操作,而是链接到不同元素的任意数字 - 为什么不将它们从具有含义的实际字符串中键入?如果您要完成的是隐藏处理请求的实际页面名称,为什么不使用以下内容:

http://www.domain.com/?/category/blog/page/links
Run Code Online (Sandbox Code Playgroud)

代替:

http://www.domain.com/page.cfm?category_id=21&page=5
Run Code Online (Sandbox Code Playgroud)

在我的例子中,我没有指向一个实际的目录,我将采用cgi.querystring param(它将包含字符串" /category/blog/page/links")并解析它并将其与键值匹配.(参见coldfusion list函数:http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content = functions- fl0_13.html,使用" /"作为分隔符).然后我可以提取我需要的类别"博客"和页面"链接"所需的逻辑 - 它可以存储在与"21"和"14"相同的数据库中.:)

现在,你的代码......

至于switch语句,它只是像一组if语句一样工作:

<cfswitch expression="value_to_check">
<cfcase value="possible_value_1">
    <!--- do something --->
</cfcase>
<cfcase value="possible_value_2,another_possible_value">
    <!--- do something different --->
</cfcase>
<cfdefaultcase>
    <!--- if none of the above, do this --->
</cfdefaultcase>
</cfswitch>
Run Code Online (Sandbox Code Playgroud)

你的include语句中也有一些奇怪之处.您不能在<cfinclude>语句中指定任何url参数.可以把它想象成从您指定的页面中抓取代码并将其粘贴到文档中.它确实如此,不多也不少.因此,您无法指定url参数.这是无效的:

<cfinclude template="../templates/page_bycategory.cfm?page_categoryid=#page_categoryid#">
Run Code Online (Sandbox Code Playgroud)

另外,case语句具有动态值是非常不正常的,例如:

<cfcase value="#page_categoryid#">
Run Code Online (Sandbox Code Playgroud)

如果您有任何疑问/需要澄清,请与我们联系