2012-02-18 71 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是。爲了解決這個問題,你可以使用一個不太可能在其他地方使用的佔位符字符串。通常你會看到使用[[NAME]爲了這個目的,所以在這個例子

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

現在你已經得到了你可以再後來就更換你的價值

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

我希望這有幫助

+0

奇怪 - 只要我使用評估(在CFSCRIPT或常規標籤)我得到一個錯誤:在第1欄第1行中發現無效CFML結構。 ColdFusion的看着下面的文字: < 的CFML編譯器是處理: <標誌着一個ColdFusion tag.Did你的意思是LT或LTE的開始? – Steve 2012-02-18 14:52:12

+0

然後你可能有一個<在評估字符串內潛在。另一種方法是例如輸入'This is a locale [[LOCALE]]';然後執行Replace()以用區域設置@渲染時間替換[[LOCALE]]。這可能是一個更好的方法(我不喜歡評估時可以避免),所以更新了我的例子 – 2012-02-18 15:07:38

0

存儲代碼本身在數據庫中有很多原因是一個壞主意,但這不是你的問題,所以我不會去進入。完成你想要的任何一種方法是將你存儲的代碼作爲字符串,寫入一個臨時文件,將該文件包含在頁面中,然後刪除該臨時文件。舉例來說,下面是實現這個概念有點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>