0

问题

说我有

{php}
    function hello(){
{/php}
    <div class="hello">{$smarty.foreach.panellist.iteration}</div>
{php}
    }
{/php}

然后在下面我打电话:

{foreach from=$channelObj->get_panellist_primary('','','pan_ptyid,pan_label1,pan_label2') item=panelObj name=panellist}
        {php}hello(){/php}
{/foreach}

我收到此错误:

PHP Fatal error: Using $this when not in object context in /var/www.app1/theURL/otherthings/channel.tpl.php on line 197

为什么这不起作用?如何从函数内部访问此 foreach 的迭代,最好不传递参数?

更多细节

因为我知道你会告诉我{php}它已被弃用......我使用它的原因是因为我被要求制作一个非常复杂的模板,所以我需要复杂的函数来构建它而不会变得一团糟,而且我'以前从未使用过smarty。我在最后期限,我已经迟到了,所以我无法学习 smarty 的正确方法。我知道如何管理此代码的唯一方法是使用常规 PHP,但我的老板坚持我用 smarty 完成整个事情......不允许使用 PHP 或 Javascript。

谢谢!

4

2 回答 2

1

这是一种可怕的编码风格,它不是使用这种代码的解决方案,因为你很着急。如果你对某些技术一无所知,你就不应该为此花钱。

您可以在 Smarty 中使用:

{foreach from=$x item=panelObj name=panellist}
    {assign var="iteration" value=$smarty.foreach.panellist.iteration}
    {php}hello(){/php}
{/foreach}

在 PHP 函数中:

function hello()
{
    global $smarty;
    ?>
    <div class="hello"><?php echo $smarty->get_template_vars('iteration'); ?>
    </div>
<?php
}

它会工作(我已经测试过了)但我什至不会尝试将这样的代码用于任何项目

于 2014-10-20T19:35:40.863 回答
1

从 foreach 访问变量需要scope=global !

{assign var=SenderID value=$Nachricht.sender_id scope=global} 
{php} echo $smarty->getTemplateVars('SenderID'); {/php} 

或者

{assign var="edit_ticket_id" value=$ticket.ticketRaw['edit_old_ticket_id'] scope=global}

{php} 全局 $smarty; var_dump($smarty->get_template_vars('edit_ticket_id')); {/php}

于 2016-10-20T11:21:52.143 回答