如何从php函数访问smarty的foreach迭代? (Smarty 2.6)

时间:2014-10-20 17:01:23

标签: php smarty smarty2

问题

说我有

{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。我已经到了最后期限,而且我已经迟到了,所以我无法学习正确的方法。我知道如何管理这段代码的唯一方法就是使用普通的PHP,但是我的老板坚持要用巧妙的方式完成所有工作......不允许使用PHP或Javascript。

谢谢!

2 个答案:

答案 0 :(得分: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
}

它会起作用(我已对它进行过测试)但我甚至不会尝试将此类代码用于任何项目

答案 1 :(得分:1)

<强>范围=全球  来自foreach的访问变量是必需的!

{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-&GT; get_template_vars( 'edit_ticket_id'));   {/ PHP}