2009-12-08 5 views
2

변수로 문자열을 평가하는 방법 (123)가 자동으로 생성되고 또한 {$ autoValue}으로 템플릿에 할당된다 {$ testVariable_123}, 스마티 : 내 템플릿에 할당 된 변수

그래서 내 템플릿에 내가 원하는입니다 위의 변수 값을 가져옵니다.

{assign var="anotherValue" value="testVariable_"|cat:$autoValue} 

내가 인쇄 그렇다면 {$ anotherValue라는}는 대신 값의 내가 얻을 문자열 'testVariable_123'당신은 값이있는 변수를 만들 필요가

어떤 도움을 주시면 감사 ...

답변

1

{$testVariable_123}
그런 다음 {eval}으로 전화 할 수 있습니다.

문제는 좋은 방법으로이를 수행 할 수있는 방법을 찾을 수 없다는 것입니다.
적당히 좋은 모든 것이 작동하지 않으며 작동하는 옵션이 추악합니다.

어쩌면 애플리케이션 디자인을 일부 변경해도 될까요?

는 여기에 내가 작업을 진행하는 관리 작업은 다음과 같습니다

# file.php: 

    $smarty->assign("autoValue", 123); 
    $smarty->assign("testVariable_123", "foo"); 

    //Option 1 
    $smarty->assign("anotherValue", "{\$testVariable_123}"); 
    //Option 2 
    $smarty->assign("rb", '}'); // Hack to get the right bracket } withou Smarty parsing it. 
    //Option 3 
    $smarty->assign("mask", '{$testVariable_%s}'); // pass the full string_format "mask" directly from PHP 

# file.tpl 

1) Uses the $anotherValue from PHP: 
Plain: {$anotherValue} 
Evaled: {eval var=$anotherValue} 

2) Build the string on Smarty itself: 
{assign var="yetAnotherValue" value=$autoValue|string_format:"{\$testVariable_%s$rb"} 
Plain: {$yetAnotherValue} 
Evaled: {eval var=$yetAnotherValue} 

3) Build the string using the mask from php: 
{assign var="enoughOfValue" value=$autoValue|string_format:$mask} 
Plain: {$enoughOfValue} 
Evaled: {eval var=$enoughOfValue} 

은 대부분 문제가 멋지 닫는 괄호} 또는 문자열의 중간에 경우에도 달러 (A $) 변수를 무시하지 것입니다. \로 이스케이프하는 것은 작동하지 않습니다.

당신은 시도 할 경우 :

{assign var="yetAnotherValue" value="{\$testVariable_$autoValue}"} 

그것이 끝에서} "를 무시하고 멋지 문을 고려할 것입니다 :

{assign var="yetAnotherValue" value="{\$testVariable_$autoValue} 

을하고 그것이 가정에도 그래도 $ testVariable을 평가합니다 이스케이프.
그래서 우리는 값 :(내가 노력

모든 것이 걸림돌 결국 같은 {\123로 끝날 것 그 문제에 관해서. 더 나은 방법을 찾을 경우 , 여기에 공유 확인하십시오 :

+0

고마워요. 나는 그것이 복잡하다는 것을 안다. : ( 내 응용 프로그램에서 내 논리를 바꿨다. –

+0

멋지다! 기꺼이 도와 줘. 적어도 못생긴 해결책을 찾아내는 것이 재미 있었다. :) –

+1

내 [대답] (http : // stackoverflow.co.kr/a/29312144/2459228), 당신이 설명한 문제에 걸림돌이되지 않는 솔루션에 관심이있는 것 같아서 :) –

-1
{assign var="myVar" value="{\$testVariable"|cat:$autoValue|cat:$smarty.rdelim} 
{eval var=$myVar} 

나를 위해 일했다.

1

나는 당신이 찾고있는 솔루션이 생각 :

{assign var="anotherValue" value='{$testVariable_'|cat:$autoValue|cat:'}'} 
{eval var=$anotherValue} 
또한 새로운 변수를 할당하지 않고 값을 얻을 수 있습니다

는 :

{eval var='{$testVariable_'|cat:$autoValue|cat:'}'} 

비결은 작은 따옴표를 사용하는 것입니다 따라서 Smarty는 변수처럼 보이는 것을 즉시 평가하려고 시도하지 않습니다.

+0

여전히보기 흉한 전반적이지만 분명히 내가 제안한 것보다 낫습니다 :-) –