0

我有一个 .cfc 文件,其中包含我的所有功能(包装在<cfcomponent>标签中),包括这个:

<cffunction name="getFooter" output="false" access="public" returnType="string">
  <cfargument name="showFooter" type="string" required="false" default="" />

  <cfreturn footer />
  <cfset application.lib.getFooter(arguments.footer)>
</cffunction>
<cfset footer = getFooter(footer="<footer class="text-center">I am a footer.</footer>") />

在我的 .cfm 文件中,我输入:

<cfoutput>#footer#</cfoutput>

它不显示页脚。

当我将所有这些都放在一个 .cfm 文件中时,它工作正常。

我需要能够将函数存储在我的 .cfc 文件中并从应用程序的任何位置调用它。

我错过了什么?

4

6 回答 6

1

还有另一种削减它的方法:

应用程序.cfc

<cfcomponent displayname="Application" output="false" hint="Handle the application.">

<!--- Set up the application. --->
<cfset this.Name = "AppCFC" />
<cfset this.ApplicationTimeout = createTimeSpan( 1, 0, 0, 0 ) />
<cfset this.sessionTimeout = createTimeSpan( 0, 0, 30, 0 ) />
<cfset this.sessionManagement = true />

<cffunction
    name="OnApplicationStart"
    access="public"
    returntype="boolean"
    output="false"
    hint="Fires when the application is first created.">
    
    <!--- These variables are available to every CFM page in the application --->
    <cfset application.lib = new path_to_Lib_CFC()>

    <cfset application.footer=application.lib.getFooter()>
    
    <cfreturn true />
</cffunction>

</cfcomponent>

库文件

<cfcomponent displayname="Lib" hint="Library of application CFCs">

<cffunction 
    name="getFooter" 
    output="false" 
    access="public" 
    returnType="string">
    
    <cfset var footer = "<footer class=""text-center"">I am a footer.</footer>" />

    <cfreturn footer />
</cffunction>

</cfcomponent>

然后,在应用程序的任何 CFM 文件中:

<cfoutput>#application.footer#</cfoutput>
于 2020-07-26T14:23:52.053 回答
1

你说,we store all of our functions in a lib.cfc file.. 因此,在该文件中,编写您的函数。

<cffunction name = "writeAppABCFooter"  <!---descriptive name in case there is another footer --->
access = "public"
output = "yes" <!--- this is important --->
returntype = "void">
html code for footer
</cffunction>

要调用您的函数,首先创建一个 lib.cfc 对象。

<cfobject name = "FooterObject" component = "lib">

然后调用函数。

<cfset FooterObject.writeAppABCFooter()>

这假定 lib.cfc 存在于允许任何应用程序调用它的位置。

于 2020-07-24T18:50:49.080 回答
1

您清楚地解释了您的要求:

我需要能够...从应用程序中的任何位置调用它。

所以,不要这样做:

“有一个 .cfc 文件,其中包含我的所有功能(包装在标签中),包括这个:”

“从应用程序中的任何位置调用它”的要求在 ColdFusion 中仅暗示一件事:应用程序范围的变量。

因此,请改为执行以下操作:将页脚功能从该 CFC 传输到 Application.cfc。

假设以下是您的 Application.cfc 的摘录。

然后,执行以下操作:

<cfcomponent displayname="Application" output="true" hint="Handle the application.">

<!--- Set up the application. --->
<cfset this.Name = "AppCFC" />
<cfset this.ApplicationTimeout = createTimeSpan( 1, 0, 0, 0 ) />
<cfset this.sessionTimeout = createTimeSpan( 0, 0, 30, 0 ) />
<cfset this.sessionManagement = true />

<cffunction
    name="OnApplicationStart"
    access="public"
    returntype="boolean"
    output="false"
    hint="Fires when the application is first created.">
    
    <!--- This variable is available to every CFM page in the application --->
    <cfset application.footer=getFooter()>
    
    <cfreturn true />
</cffunction>


<cffunction 
    name="getFooter" 
    output="false" 
    access="public" 
    returnType="string">
    
    <cfset var footer = "<footer class=""text-center"">I am a footer.</footer>" />

    <cfreturn footer />
</cffunction>

</cfcomponent>

然后,在应用程序的任何 CFM 文件中:

<cfoutput>#application.footer#</cfoutput>
于 2020-07-24T14:38:30.990 回答
0

我要问和回答我认为你想要什么。

问题

我有一个应用程序,它需要有共同的页脚。我的页脚需要具备某种业务逻辑的能力。现在它只是静态文本。我认为我的页脚需要成为一个函数。

我怎样才能做到这一点?哦,我需要用标签来做这个,而不是脚本

回答

首先,我们需要一个范围很广的函数。我要把它放进去application.cfc。确实application.cfc是 a .cfc,但它非常特别。

<!--- application.cfc --->
<cfcomponent>
...
<cffunction name="getFooter">
    <cfsavecontent variable="local.result">

    </cfsavecontent>

    <cfreturn local.result>
</cffunction>

<cfset application.getFooter = getFooter>
...
</cfcomponent>

现在在每个.cfm文件中,您可以

<cfoutput>#application.getFooter()#</cfoutput>
于 2020-07-24T04:33:12.460 回答
0

事实证明,这比我们大多数人想象的要简单得多。<cfsavecontent>标签不是必需的。不需要将 HTML 存储在变量中。我不知道是不是我,但这变得过于复杂了。

最终,这就是我最终要去的地方。

lib.cfc 文件

<cffunction name="getFooter" output="true" access="public" returntype="string">
    <footer>I am a footer.</footer>
</cffunction>

index.cfm 文件

<cfoutput>
    #application.lib.getFooter()#
</cfoutput>
于 2020-07-25T01:17:21.260 回答
0

我发现将简单的可重复使用的东西放在他们自己的 CFM 中并在需要时包含它们很有用。

/app/includes/footer.cfm

<p>I am the footer</p>

索引.html

<cfinclude template="app/includes/footer.cfm">
于 2020-07-26T20:32:08.383 回答