理解PHP Smarty模板Foreach与嵌套while

时间:2012-03-04 23:21:21

标签: php smarty

我在smarty模板中有以下代码:

{foreach from=$categories item=l}
          <tr>----------START---------------</tr> <br/>

        {$l.category_name|strip_tags}
        {$l.sub_category}

        {while $l.sub_category}

            <td>{$l.category_name|strip_tags}</td>
            {foreach from=$l.sub_category item=k}
                <td>{$k.category_name|strip_tags}</td>
                <br/>
            {/foreach}

            <br/>
        {/while}

        ----------END---------------
            <br/>
        <br/>
    {/foreach}

输出:

---------- START --------------- 教师与StaffArray

---------- END ---------------

---------- START --------------- PTA&amp;基础

---------- END ---------------

---------- START --------------- 丰富课程

---------- END ---------------

教师&amp;工作人员5年级6年级 PTA&amp;基金会
丰富课程

我希望打印出来:

---------- START --------------- 教师与人员

五年级五年级

---------- END ---------------

---------- START --------------- PTA&amp;基础

---------- END ---------------

---------- START --------------- 丰富课程

---------- END ---------------

似乎输出在for循环后打印。我是smarty模板的新手,并没有真正理解为什么会这样打印。

此外,我还有另一个问题:

{while $l.sub_category}

                {foreach from=$l.sub_category item=k}
                       <br/>
                    { $k.category_name|strip_tags }

                {/foreach}


               { assign var=l value=$l.sub_category}

                <br/>
            {/while}

我想更新循环条件变量..但是我不确定我的分配方法是怎么做的。

任何建议表示赞赏。

1 个答案:

答案 0 :(得分:1)

我认为问题可能在于您的表格结构,在输出td标签之前打开和关闭tr,然后某些浏览器会不按顺序显示内容。

应该是

{foreach cat loop}
  <tr>
    <td>
      {while loop}
    </td>
    <td>
      {foreach loop}
    </td>
  </tr>
{/close foreach loop}