基于列将Smarty数组分成多个表

时间:2014-01-13 17:31:33

标签: php html smarty3

我正在根据PHP中的一些操作创建以下数组结构。

array
(
  [7] => array(
    [id] => 7
    [page] => dashboard
    [text] => Text 3
  )
  [1] => array(
    [id] => 1
    [page] => index
    [text] => Text 2
  )
  [3] => array(
    [id] => 3
    [page] => index
    [text] => Text 3
  )
}

我正在使用下面的Smarty模板基于这个数组结构创建表,它工作正常。

<table>
    <tr>
        <th>{text key='sitetour+page'}</th>
        <th>{text key='sitetour+text'}</th>
    </tr>

    {foreach from=$allSteps key='id' item='step'}
      <tr>
          <td>{$step.page}</td>
          <td>{$step.text}</td>
      </tr>
    {/foreach}

</table>

我正在寻找的是,根据“页面”的值,我需要为“page”的每个唯一值创建表,而不是包含所有值的单个表。

以下提供了示例。

当前输出:(单表无论页面值如何)

page      | text
---------------------
dashboard | text 3
index     | text 2
index     | text 3

预期输出:(根据页面值打破2个表格)

dashboard 
---------------------
text 3

index
---------------------
text 2
text 3

我在这里搜索时找不到任何样本。提前谢谢。

3 个答案:

答案 0 :(得分:1)

无法检查。但是,请尝试:

{foreach from=$allSteps key='id' item='step' name="loop" }

  {if $smarty.foreach.loop.first } 
    {assign var="current" value=$step.page }
    <table>
     <thead>
      <tr> <td>{$step.page}</td> </tr> 
     </thead>
      <tr> <td>{$step.text}</td> </tr>
  {else}
     {if $current == $step.page }
       <tr>
         <td>{$step.text}</td>
       </tr>           
     {else} 
      {assign var="current" value=$step.page }
      </table> <!-- Close prev. table -->
      <table>  <!-- Start next table -->
       <thead>
        <tr> <td>{$step.page}</td> </tr> 
       </thead>
        <tr> <td>{$step.text}</td> </tr>
     {/if}
  {/if}
{/foreach}
</table> <!-- close last table -->

答案 1 :(得分:0)

你期待两个表,但你拥有的html只输出一个表。你应该做的是格式化你的数据:

array
(
  ['dashboard'] => array(
        [7] => array(
        [id] => 7
        [text] => Text 3)
  )
  ['index'] => array(
    [1] => array(
    [id] => 1
    [text] => Text 2)

    [3] => array(
    [id] => 3
    [text] => Text 3)
  )
}

如果页面名称是php数组中的键,请调用此数组$pages或其他内容,然后执行以下操作:

{foreach $pages as $page}
<table>
    <tr>
        <th>{$page@key}</th>
    </tr>

    {foreach $page as $text}
      <tr>
          <td>{$text['text']}</td>
      </tr>
    {/foreach}

</table>
{/foreach}

答案 2 :(得分:0)

因为输出是线性的,所以你不能真正在表之间来回传递。你需要做的是有多个foreach循环,并在循环内放置一个条件

<table>
    <tr>
        <th>{text key='sitetour+page'}</th>
        <th>{text key='sitetour+text'}</th>
    </tr>

    {foreach $allsteps as $step}
      <tr>
          {if $step.page == "dashboard"}
              <td>{$step.text}</td>
          {/if}
      </tr>
    {/foreach}

</table>

<table>
    <tr>
        <th>{text key='sitetour+page'}</th>
        <th>{text key='sitetour+text'}</th>
    </tr>

    {foreach $allsteps as $step}
      <tr>
          {if $step.page == "index"}
              <td>{$step.text}</td>
          {/if}
      </tr>
    {/foreach}

</table>

编辑:另一种解决方案是在将结果发送到页面

之前在php端解析结果