使用Coldbox框架,有没有办法拦截renderView调用并执行不同的模板?

时间:2011-08-06 00:01:11

标签: coldfusion coldbox

我正在尝试学习Coldbox,以替换我正在使用的当前框架。我目前使用的一个功能是能够按惯例覆盖任何模板包含。

基本上,我可以说我有一个观点,“views / home.cfm”

<h1>I am the default theme</h1>

这一切都很好。但是让我说我​​有一个不同的观点,“主题/ [主题名称] /views/home.cfm”

<h1>I am the user chosen theme</h1>

我想要有条件地包括(比如有一个cookie来确定正在使用的主题)。此外,如果文件不存在,则应呈现默认/回退视图。

有没有办法覆盖系统功能呢?

我查看了拦截器,preViewRender和postViewRender拦截器看起来像是这样做的地方,但似乎没有任何方法来操纵实际的工作流程。如果似乎主要是前/后处理的内容。例如,似乎没有办法“返回false”来告诉renderView方法实际上不呈现视图。或以任何方式影响查找视图的位置。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

泰勒,

ColdBox Framework非常灵活。可以做你想做的事情,但我不认为修改renderView()是解决这个问题的最佳方法 - 尽管你绝对可以。

我建议您在/includes/helpers/ApplicationHelper.cfm文件中创建一个包含所需逻辑的用户定义函数。可以从框架中的任何位置访问添加到此帮助程序文件的函数。这将允许您创建一个名为“renderSkin()”的函数,其中包含您需要的逻辑。当你最终想出要为该用户呈现的模板时,RenderSkin()会最终调用“renderView()”。

此致,

Aaron Greenlee

答案 1 :(得分:0)

我建议你使用拦截器路线,但改变布局而不是视图。

postEvent拦截器,您可以从processedEvent获取interceptData密钥以更改布局。

否则你可以只做布局页面的检查部分。布局可以是一个switch语句(或更多OO方法)$,包括所需的主题布局文件。这样做的好处是可以让你有机会发出自定义拦截点并具有通用功能(css,js)