2012-02-18 19 views
0

私はデータベースのテーブルにページの内容を保存しています。ページの内容には、いくつかのCF変数も含まれます(たとえば、「このベンダーは#VARIABLES.vendorLocale#にサービスを提供します)」。出力変数がデータベースに格納されています

VARIABLES.vendorLocalは、URL文字列に基づいてページに設定されます。

次へCFCにアクセスして、対応するページテキストをデータベースから取得します。

そして、これは、そのページの出力です:#qryPageContent.c_contentの#

しかし#VARIABLES.vendorLocale#がない実際の変数として、そのままアップ示しています。 "変数内の変数"を正しく出力するための方法はありますか?

これはCF9サーバー上にあります。

答えて

1

あなたは、文字列、すなわち

variables.vendorLocal = 'foo'; 
variables.saveMe = 'This is a string for supplier "#variables.vendorLocal#'"' ; 
WriteOutput(variables.saveMe); // This is a string for locale "foo" 

を持っている場合、ColdFusionはvariables.vendorLocaleが何であれ、変数を挿入することを解析しようとします。この問題を回避するには、他の場所で使用されそうにないプレースホルダ文字列を使用できます。一般的に、あなたが今、あなたはあなたがその後の私はあなたの価値のために

variables.vendorLocal = 'bar'; 
variables.loadedString = Replace(variables.saveMe,'[[VENDORLOCALE]]',variables.vendorLocal); 
WriteOutput(variables.loadedString); // This is a string for locale "bar" 

それを置き換えることができることを持っている

variables.saveMe = 'This is a string for supplier "[[VENDORLOCALE]]'"' ; 
WriteOutput(variables.saveMe); // This is a string for supplier "[[VENDORLOCALE]]" 

この例のように、[[NAME]]、この目的のために使用される表示されますこれが助けになることを望みます

+0

- とすぐに私は(どちらかのCFScriptまたは通常のタグで)評価使用されるように、私はエラーを取得:1欄に1行で見つかった無効なCFMLコンストラクト。 ColdFusionは、次のテキストを見ていた: < CFMLコンパイラが処理していた: を<あなたはLTまたはLTEを意味するのColdFusion tag.Didの始まりを示しますか? – Steve

+0

次に、評価された文字列内に<がある可能性があります。別の方法としては、たとえば 'This is a locale [[LOCALE]]'と入力するだけです。 Replace()を実行して[[LOCALE]]をロケール@レンダリング時間に置き換えます。これはおそらくより良い方法です(私は避けることができる時に評価することに熱心ではありません)ので、私の例を更新しました –

0

コード自体をデータベースに格納するのは悪い考えですが、それはあなたの質問ではないので、私はそれには入りません。あなたが望むものを達成する1つの方法は、文字列として保存したコードを取り出し、一時ファイルを書き出し、そのファイルをページに含めてから、その一時ファイルを削除することです。例えば、ここではその概念を実装して少しUDFです:

ストレンジ
<cfscript> 
    function dynamicInclude(cfmlcode){ 
    var pathToInclude = createUUID() & ".cfm"; 
    var pathToWrite = expandPath(pathToInclude); 
    fileWrite(pathToWrite,arguments.cfmlcode); 
    include pathToInclude; 
    fileDelete(pathToWrite); 
    } 

    language = "CFML"; 
    somecfml = "This has some <b>#language#</b> in it"; 
    writeOutput(dynamicInclude(somecfml)); 
</cfscript> 
関連する問題