2012-02-18 1 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은 다음과 같은 텍스트를 찾고 있었어요 : 은 <는 ColdFusion은 LT 또는 LTE 의미 tag.Did의 시작을 표시 : < CFML을 컴파일러가 처리했다? – Steve

+0

그러면 평가 된 문자열 내에 <가있을 가능성이 높습니다. 다른 예로는 'This is a locale [[LOCALE]]'; [(LOCALE])을 로캘 @ 렌더링 시간으로 바꾸려면 Replace()를 수행하십시오. 이것은 아마도 더 좋은 방법 일 것입니다. (필자는 피할 수있을 때 Evaluate에 열중하지 않습니다.) 그래서 예제를 업데이트했습니다. –

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>