PHP & Smarty의 동적 콘텐츠
-
05-09-2019 - |
문제
Smarty를 사용하고 Config_load를 각각 사용하고 있습니다 {#VAR#}
현지화를 구현하기위한 변수. 컨텐츠가 템플릿 내에있는 한 완벽하게 작동하지만 tpl 파일 내에 동적 컨텐츠를 추가해야하자마자 다음과 같이 작동합니다.
{if isset($var) }
{foreach from=$var item=line}
{$line}<br>
{/foreach}
{/if}
$ var 내의 각 항목에 주목하십시오. 일반적으로 하나가 포함됩니다. {#VAR#}
진입 - 그리고 그들은입니다 번역되지 않았습니다 (사용자가 보게 될 것입니다 {#VAR#}
).
이 경우 현지화를 구현하는 올바른 방법은 무엇입니까?
해결책
나는 교체만으로 끝났다 {$line}<br>
위의 코드에서 :
{eval var=$line}
그것은 나를 위해 트릭을했다.
해결책
당신은 아마도 {Eval}과 같은 것을 찾고있을 것입니다.
보세요 {Eval} 선적 서류 비치.
당신의 상황에서, 당신은 이것을 시도 할 수 있습니다 :
example.php
<?php
(...)
$var = array("{#OK#}", "{#CANCEL#}");
$smarty->assign('var', $var);
$smarty->display('example.tpl');
?>
example.config
OK = Okay
CANCEL = Nevermind
예제 .tpl
{config_load file='example.config'}
<h1>Template stuff</h1>
{if isset($var) }
{foreach from=$var item=line}
{eval var=$line}<br>
{/foreach}
{/if}
도움이되기를 바랍니다! :)
다른 팁
내가 본 훌륭한 무리는 번역에 수정자를 사용하는 것이 었습니다. 이를 통해 동적 컨텐츠를 번역 할 수 있습니다.
모든 코드는 단지 예제 일뿐입니다.
의 말을하자
당신의 tpl
{"Hello word! How are you %s?"|translate:"Gabriel"}
{$myvar|translate:"Gabriel"}
당신의 수정 자
function smarty_modifier_translate($content, $args) {
$lang = Env::getLanguage();
return vsprintf($lang->getTranslation($content), $args);
}
Smarty가 템플릿을 PHP 코드로 구문 분석하고 Templates_C 디렉토리에 저장 한 것을 보았을 것입니다. 이 라이브러리가 매우 빠르게 실행됩니다. 달성하려는 것은 루프 코드가 실행될 때마다 완전한 새 템플릿을 구문 분석해야합니다. 이렇게하면 응용 프로그램이 매우 느려집니다.
Constatnts에 메시지를 저장하지 않고 템플릿에 메시지를 저장하는 것이 좋습니다.
{assign var='lang' value='en'}
{if isset($var) }
{foreach from=$var item=line}
{include file="$lang/$line.tpl"}<br>
{/foreach}
{/if}
제휴하지 않습니다 StackOverflow