0

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

本质上,假设我有一个视图,“views/home.cfm”

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

这一切都很好。但是可以说我有不同的看法,“themes/[theme-name]/views/home.cfm”

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

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

有什么方法可以覆盖系统功能吗?

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

有任何想法吗?

4

2 回答 2

1

泰勒,

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

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

尊敬,

亚伦·格林利

于 2011-08-06T18:12:52.537 回答
0

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

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

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

于 2011-08-08T14:10:08.397 回答