我的问题的标题看起来很简单,但这是我想要做的事情的示例:
http://www.mayoclinic.com/health/infant-jaundice/DS00107
该页面上发生的情况是,每当您单击链接转到“婴儿黄疸”文章中的某个部分(例如“症状”)时,它会提供如下 URL 参数:
http://www.mayoclinic.com/health/infant-jaundice/DS00107/DSECTION=symptoms
作为DESCTION
参数改变,同一页面得到不同的内容DS00107
。内容也发生变化<meta keywords>
。
有人可以告诉我这是如何实现的吗?我认为这是一个 if/else 情况被编程到页面本身中,以根据 URL 参数显示不同的属性。我使用 ColdFusion 10 作为我的 Web 服务器。
我不是问要使用什么技术,例如 Ajax 。我不介意有一个完全重新加载的页面。但是,它从哪里获取页面上各种 HTML 标签和 DIV 的正确文章信息呢?它应该在 if/else 语句中还是应该存储在数据库中?
我认为将其存储在数据库中可能会很乏味......您可以将所有段落和有序列表信息存储在表中。但这是正确的方法吗?
最佳答案
您看到的是 URL 重写。这可以在 Web 服务器内完成,而不是在 ColdFusion/PHP ext 中完成。 Web 服务器要做的是将 url mayoclinic.com/health/infant-jaundice/DS00107/DSECTION=symptoms
重写为类似以下的链接:mayoclinic.com/health/infant-jaundice/DS00107/index.cfm?DSECTION=症状
。
为了在页面中显示内容,如果您有超过 2-3 个可能的显示,我会使用 switch 语句,而不是使用一系列 if/else。您可以根据需要使用任意数量的 case block 。
<cfswitch expression=”#url.DSECTION#>
<cfcase value="symptoms">
<!--- symptoms code / html here --->
</cfcase>
<cfcase value="causes">
<!--- causes code / html here --->
</cfcase>
<cfdefaultcase>
<!--- default code / html here --->
</cfdefaultcase>
</cfswitch>
这是一个非常简单的例子,用来说明URL重写的思想。
添加:
I was wondering if perhaps they were using a database query rather than if/else statements?
是的,你可以。对于查询驱动的结果,你可以这样做:
<cfquery name="pageContent" datasource="yourDatasource">
SELECT htmlText
FROM pages
WHERE page = 'dir/index.cfm'
AND content <cfqueryparam cfsqltype="cf_sql_varchar" value="#url.DSECTION#">
</cfquery>
<cfoutput>#pageContent.htmlText[1]#</cfoutput>
如果内容是静态的,并且很少更新,另一个选择是研究包含内容并尝试利用基于内容执行代码的能力。
<cfinclude template="./includes/symtoms.cfm"> or <cfinclude template="./includes/#url.DSECTION#.cfm">
关于html - 根据URL参数动态改变页面内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17300267/