使用:CF10和IIS7.5
我的网站中有一个名为“预订”的部分。它的位置如下:
c:\inetpub\wwwroot\mysite\bookings
在此文件夹中将是子文件夹,最终将是网页本身。下面是一个例子:
c:\inetpub\wwwroot\mysite\bookings\holidays\new.cfm
c:\inetpub\wwwroot\mysite\bookings\carhire\edit.cfm
我在每个网页中包含(使用<cfinclude>
)另一个页面,根据调用它的页面显示不同的链接。我想知道的是“预订”文件夹之前的目录。像这样的东西(伪代码):
<cfset whereAmI = #GetDirectoryFromPath(GetBaseTemplatePath())#>
<cfif #whereAmI# EQ "C:\inetpub\wwwroot\mysite\bookings">
<h1>Booking Section Links</h1>
</cfif>
以上代码仅在用户访问“预订”文件夹的bookings/index.cfm
页面时才有效。但是,如果他们转到bookings/holidays/new.cfm
页面,它现在位于holidays
文件夹中,因此<h1>
内容将不会显示。我真的只想检查预订文件夹中的任何页面,即使它位于预订文件夹中的子文件夹中。有点像在SQL中,我可以说IF #GetDirectoryFromPath(GetBaseTemplatePath())# LIKE 'c:\inetpub\wwwroot\mysite\bookings%'
所以它最后有一个通配符。
我知道这个问题会激怒MVC框架的拥护者,但请原谅我!
答案 0 :(得分:5)
这是解决问题的快捷方式(可能无法在系统扩展时运行 - 但应该让您从正确的道路开始)。
<cfset whereAmI = GetDirectoryFromPath(GetBaseTemplatePath())>
<cfif whereAmI CONTAINS "C:\inetpub\wwwroot\mysite\bookings">
<h1>Booking Section Links</h1>
</cfif>
注意,我从#
和cfset
内部删除了cfif
,但您不需要它们。
你甚至可以缩小路径,只使用'mysite \ bookings'。
理想情况下,这应该包含在一个函数中,以便您可以轻松地将不同的路径传递给它,以确定您是否在给定页面上。或者,甚至可以确定Application.cfc中onRequestStart
中的“父”文件夹,并将其设置为请求范围变量。
如果您在基于* nix的系统上运行代码,则需要进行调整。
答案 1 :(得分:0)
使用CGI变量更容易。您可以使用“CF_TEMPLATE_PATH”。试试这个
<cfoutput>The value of CF_TEMPLATE_PATH is: </cfoutput><cfdump var="#CF_TEMPLATE_PATH#">