0

我正在尝试在 javascript 中使用 smarty。

这是我的 .php 和 .tpl 的完整代码:

.php

<?php

$_CRUMBS->Add("User false logs", "/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 -->

但是我那里有错误。我已经尝试过文字,但没有任何改变。谢谢你。

4

4 回答 4

2

当您使用{and时,您肯定会在这里遇到错误},它们是 smarty 中的保留字符。将它们更改为{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>
于 2012-06-11T07:36:23.587 回答
2

我建议使用 json_encode,如下所示:

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

然后在 js 中:

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

</script>
于 2012-06-18T21:00:58.243 回答
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的卷曲周围加上文字,否则smarty会死

于 2012-06-11T07:35:29.510 回答
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 {literal}标签不是必需的。

于 2012-06-11T08:33:44.007 回答