$ smarty-> assign( 'o'、$ o)のようにSmartyに渡されるオブジェクトをPHPに入れました そのオブジェクトにアクセスする必要があります。 javascript。PHPからSmartyおよびJavaScriptに渡される変数
どのようにして、tplにjavascriptを使用せずに行うのですか?私はそれらをすべて外部ファイルに入れたい。
できない場合はどうすればいいですか?
$ smarty-> assign( 'o'、$ o)のようにSmartyに渡されるオブジェクトをPHPに入れました そのオブジェクトにアクセスする必要があります。 javascript。PHPからSmartyおよびJavaScriptに渡される変数
どのようにして、tplにjavascriptを使用せずに行うのですか?私はそれらをすべて外部ファイルに入れたい。
できない場合はどうすればいいですか?
いいえ、できません。 Smartyのassign
メソッドは、PHPからテンプレートにデータを渡すだけです。
あなたは出力に必要なJSのだろう、独自のSmartyの機能を作成して、テンプレートに変性剤としてそれを使用することができます:zerkms年代とDidozavarの答えを組み合わせること
{$o|jsify}
<script type="text/javascript"> var variable = {variable}; </script>
が、ここでは、再利用可能な修飾因子機能です。
<?php
function jsify($object, $name = 'foo'){
$json_object = json_encode($object);
return "<script type=\"text/javascript\"> var $name = $json_object; </script>";
}
$smarty->register_modifier("jsify", "jsify");
$smarty->assign("foo", $foo);
$smarty->assign("bar", $bar);
?>
{* In Template *}
{$foo|jsify}
{$bar|jsify:bar}
{* Verify *}
<script type="text/javascript">
// assuming you're using a browser that supports console
console.log(foo);
console.log(bar);
</script>
編集: このことを考えたら、私を作るために、より一貫性があるかもしれませんテンプレート関数{assign}
をカスタム関数でミラーリングします。
<?php
function assign_to_javascript($params, $template){
// validate params values
$name = $params['var'];
$json_object = json_encode($params['value']);
echo "<script type=\"text/javascript\"> var $name = $json_object; </script>";
}
$smarty->register_function("assign_to_javascript", "assign_to_javascript");
$smarty->assign("foo", $foo);
$smarty->assign("bar", $bar);
?>
{* In Template *}
{assign_to_javascript var="foo" value=$foo}
{assign_to_javascript var="bar" value=$bar}
{* Verify *}
<script type="text/javascript">
// assuming you're using a browser that supports console
console.log(foo);
console.log(bar);
</script>
は私が..contentが.TPLに表示されますので、
が.phpの中に直接javascriptの変数にPHPの変数を渡すhtmlのないような解決策を発見したと信じて、それが動作します、そして...コンテンツは.tplとhtmlに表示されますこの問題を解決した場合は、解決策を簡単にお知らせください。 – Raj
私は以下のテクニックを使用してくれました。
test.phpファイルにあります。
$t = new template();
$t->assign("testVar", $testVar);
$t->fetch("test.tpl");
test.tplファイルにあります。 grabMeでdivを作成します。
<div id="grabMe">{$testVar}</div>
{literal}
<script language="javascript" type="text/javascript">
var testVar = $("#grabMe").text();
</script>
{/literal}
正常に動作します。
あなたはSmartyの経由で変数を割り当てるように、これはかなり、トリックを行い
var base_dir = "{$base_dir}";
'$ base_dir'に引用符が含まれていると、これはおそらく失敗します。 'var base_dir = '{$ base_dir | escape:' javascript '}';'は文字列の方が良いかもしれません。 – sofl
(単一引用符は、私の場合で働いていない)私は、次のような手法を使用して、私はSmartyの変数arroundの二重引用符を使用し ためにそれは動作しますこちらです。 +1。 – Sander
これは非常に単純な変数に対してのみ機能し、オブジェクトや配列に対しては機能しません。 –