0

現在使用しているフレームワークをおそらく置き換えるために、Coldbox を学習しようとしています。私が現在使用している機能の 1 つは、慣例によりテンプレートのインクルードをオーバーライドする機能です。

基本的に、「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 インターセプターはこのようなことを行う場所のように見えますが、実際のワークフローを操作する方法はないようです。主にコンテンツの前後処理のようです。たとえば、実際にはビューをレンダリングしないように renderView メソッドに指示するために「false を返す」方法はないようです。または、ビューが見つかる場所に影響を与える方法。

何か案は?

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 に答える