2011-06-14 44 views
3

$ smarty-> assign( 'o'、$ o)のようにSmartyに渡されるオブジェクトをPHPに入れました そのオブジェクトにアクセスする必要があります。 javascript。PHPからSmartyおよびJavaScriptに渡される変数

どのようにして、tplにjavascriptを使用せずに行うのですか?私はそれらをすべて外部ファイルに入れたい。

できない場合はどうすればいいですか?

答えて

1

いいえ、できません。 Smartyのassignメソッドは、PHPからテンプレートにデータを渡すだけです。

あなたは出力に必要なJSのだろう、独自のSmartyの機能を作成して、テンプレートに変性剤としてそれを使用することができます:zerkms年代とDidozavarの答えを組み合わせること

{$o|jsify} 
1

<script type="text/javascript"> var variable = {variable}; </script>

+0

(単一引用符は、私の場合で働いていない)私は、次のような手法を使用して、私はSmartyの変数arroundの二重引用符を使用し ためにそれは動作しますこちらです。 +1。 – Sander

+0

これは非常に単純な変数に対してのみ機能し、オブジェクトや配列に対しては機能しません。 –

2

が、ここでは、再利用可能な修飾因子機能です。

<?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> 
0

は私が..contentが.TPLに表示されますので、

が.phpの中に直接javascriptの変数にPHPの変数を渡すhtmlのないような解決策を発見したと信じて、それが動作します、そして...コンテンツは.tplとhtmlに表示されます

+0

この問題を解決した場合は、解決策を簡単にお知らせください。 – Raj

0

私は以下のテクニックを使用してくれました。

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} 

正常に動作します。

1

あなたはSmartyの経由で変数を割り当てるように、これはかなり、トリックを行い

var base_dir = "{$base_dir}"; 
+0

'$ base_dir'に引用符が含まれていると、これはおそらく失敗します。 'var base_dir = '{$ base_dir | escape:' javascript '}';'は文字列の方が良いかもしれません。 – sofl

関連する問題