2012-06-11 58 views
0

我想在javascript中使用smarty。在javascript中使用smarty數組

這裏是我的.PHP和.tpl的完整代碼:

.PHP

<?php 

$_CRUMBS->Add("User false logs", "https://stackoverflow.com/users/user false logs/"); 


$ufl = $_DB->queryRaw("SELECT `user_id` ,`firstname`,`lastname` FROM `employees`"); 

while ($row = $ufl->next_assoc()) { 
$results[] = $row; 
} 

$smarty->assign("ufl",$results); 
$smarty->TDisplay("users/backend_users.tpl", "MDPI Backend | Backend Users", "general-content.tpl"); 

?> 

.tpl

<h1>Create Backend Users</h1> 



<script> 
$(function() { 
    var availableTags = [ 
     {foreach from=$ufl item=uflItem} 
      <tr> 
       <td>{$uflItem['firstname']}</td> 
      </tr> 
    {/foreach} 
    ]; 
    $("#tags").autocomplete({ 
     source: availableTags 
    }); 
}); 
</script> 


<div class="demo"> 
<div class="ui-widget"> 
<label for="tags">Tags: </label> 
<input id="tags"> 
</div> 

</div><!-- End demo --> 

但我有錯誤出現。我嘗試了智慧,但沒有改變。謝謝。

+1

Smarty的是還沒有爲JavaScript。 Smarty是針對PHP的。不要混淆關注:( –

+0

數組中的項目應該用逗號隔開,並用引號將它們包裝在一起,因爲它們是字符串。 – fcalderan

+0

我是PHP,smarty和Javascript開發的新手。我的目標是創建一個自動填充框smarty數組命名爲$ ufl。vorking示例採用http://jqueryui.com/demos/autocomplete/形式,但我的目標是使用smarty變量而不是靜態數組。 –

回答

2

你一定會在這裏有錯誤,您正在使用{},這些將被保留聰明的人物。將它們更改爲{ldelim}{rdelim}。此外,在smarty中解引用數組的語法不同:一個點。我不太確定你爲什麼要在項目周圍放置<tr><td>,但你知道的更好。您可能會遇到更多麻煩,因爲您的自動填充選項在其中存在換行符,因此請使用{strip}來解決此問題。

試試這個代碼,而不是:

<script> 
$(function() {ldelim} 
    var availableTags = [ 
     {foreach from=$ufl item=uflItem name=uflloop}{strip} 
      '<tr> 
       <td>{$uflItem.firstname|escape:'quotes'}</td> 
      </tr>' 
      {if !$smarty.foreach.uflloop.last},{/if} 
    {/strip}{/foreach} 
    ]; 
    $("#tags").autocomplete({ldelim} 
     source: availableTags 
    {rdelim}); 
{rdelim}); 
</script> 
+0

謝謝Aleks,可能我忘了提及我正在嘗試在.tpl文件中使用它。當我嘗試你的代碼時,我也得到了一些錯誤,比如在這一行發現了多個註釋: \t - 缺少分號 \t - 標記的語法錯誤,刪除這些 –

+0

@Ana那麼,這將是由JavaScript語法錯誤你的原始代碼。我更新了我的答案(希望)修復這些問題。 –

+0

再次感謝你,我用整個代碼更新了我的問題。我嘗試了你的編輯過的代碼,但仍然是同樣的錯誤,我不知道wyy :-( –

1
<h1>Create Backend Users</h1> 



<script>{literal} 
$(function() { 
    var availableTags = [ 
     {/literal}{foreach name=things from=$ufl item=uflItem} 
      "{$uflItem['firstname']}"{if $smarty.foreach.things.last != true} ,{/if} 
    {/foreach}{literal} 
    ]; 
    $("#tags").autocomplete({ 
     source: availableTags 
    }); 
});{/literal} 
</script> 


<div class="demo"> 
<div class="ui-widget"> 
<label for="tags">Tags: </label> 
<input id="tags"> 
</div> 

你必須把文字周圍的js的捲曲的,否則智者會,死

+0

謝謝EaterOfCorpses,正如我對Alex說的,我我試圖在.tpl文件中使用此代碼,當我嘗試使用您的示例時,出現一些錯誤。 –

+0

錯誤是什麼? – EaterOfCode

+0

在此行發現多個註釋: \t - 令牌的語法錯誤,刪除這些 \t標記 –

0

你的代碼看起來不錯,我看不運行它是在JavaScript中唯一的問題。 嘗試是這樣的:

<script> 
$(function() { 
    var availableTags = [ 
     {foreach from=$ufl key=index item=uflItem} 
      '<tr>\ 
       <td>{$uflItem['firstname']}</td>\ 
      </tr>'{if isset($ufl[$index+1])},{/if} 
    {/foreach} 
    ]; 
    $("#tags").autocomplete({ 
     source: availableTags 
    }); 
}); 
</script> 

順便說一句,因爲Smarty的3不需要{}文字標籤

+0

謝謝,我正在使用最早的smarty。 –

2

我建議使用json_encode,像這樣的:JS

$names = array(); 
foreach($result in $results) 
    $names = $result['firstname'] 
$smarty->assign("names",json_encode($names)); 

再後來:

<script> 
$(function(){ 
    var availableTags = {/literal}{$names}{literal}; //array is pulled out from smarty 
    $("#tags").autocomplete({ 
     source: availableTags 
    }); 
}); 

</script> 
+0

謝謝bershika。 –