【问题标题】:Arrange elements into columns with Smarty使用 Smarty 将元素排列到列中
【发布时间】:2009-03-19 11:34:52
【问题描述】:

我有一个生成元素数组的 php 页面。为简单起见,假设它包含按数字顺序排列的数字 1-5。这些数字需要相等(或尽可能接近相等)分成两列(使用 html 表),如下所示:

1   4
2   5
3

列数将来可能会发生变化。由于这是表示级别的更改,我认为它应该是可以通过仅在模板文件中进行更改来实现的。这向我表明,应该由 Smarty 处理将元素划分为列。

有没有办法通过 Smarty(以及如何)实现这一点,或者我应该让 php 文件完成所有工作?

【问题讨论】:

    标签: php smarty template-engine


    【解决方案1】:

    在 smarty 中可以做到这一点,但是由于 HTML 和 CSS 并不真正支持列,所以这样做很痛苦。它涉及计算数组中有多少项目,并首先使用 {section} 标签来获取项目的前半部分(向上取整),并将它们显示在一列中,然后使用单独的 {section} 来获取第二列一半(四舍五入)的项目并将它们放在第二列中。

    对于 {section},您可以指定从哪个数组索引开始以及需要多少项。如果您将数组中的项目数设置为另一个变量,您可以计算它。

    您可以尝试这样的代码 - 但恐怕我还没有测试过这些计算,所以它可能是错误的......

    <td>
      {section name=myitem loop=$items max=(($itemcount/2)+0.499)}
        {$items[myitem]}
      {/section}
    </td>
    <td>
      {section name=myitem loop=$items start=(($itemcount/2)+0.499)}
        {$items[myitem]}
      {/section}
    </td>
    

    【讨论】:

      【解决方案2】:

      这是我使用 foreach 和迭代的解决方案:

      <ul>
      {foreach from=$items item=item name=firstFE}
                  {if $smarty.foreach.firstFE.index lt ($items|@count / 2)}
                     <li>{$item->title}</li>
                  {/if}
      {/foreach}
      </ul><ul>
      {foreach from=$items item=item name=secFE}
                  {if $smarty.foreach.secFE.index gte ($items|@count / 2)}
                     <li>{$item->title}</li>
                  {/if}
      {/foreach}
      </ul>
      

      【讨论】:

        猜你喜欢
        • 2012-07-24
        • 2018-08-31
        • 1970-01-01
        • 1970-01-01
        • 2014-03-31
        • 1970-01-01
        • 1970-01-01
        • 2021-12-23
        • 1970-01-01
        相关资源
        最近更新 更多