我将页面内容存储在数据库表中。页面内容还包括一些CF变量(例如“......此供应商为#VARIABLES.vendorLocale#”提供服务)。
基于URL字符串在页面上设置VARIABLES.vendorLocal。
接下来,访问CFC以从数据库中获取相应的页面文本。
然后在页面上输出:#qryPageContent.c_content#
但#VARIABLES.vendorLocale#按原样显示,而不是实际变量。无论如何要将“变量中的变量”正确输出吗?
这是在CF9服务器上。
答案 0 :(得分: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会尝试解析插入任何变量变量.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"
我希望这有帮助
答案 1 :(得分: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>