【问题标题】:Templating: what is the best way to display list of items with separators?模板:显示带有分隔符的项目列表的最佳方式是什么?
【发布时间】:2017-03-16 05:47:03
【问题描述】:

假设我有一个要显示为列表的数据数组:

$goods = [
    ['title' => 'First item', 'description' => 'First item description'],
    ['title' => 'Second item', 'description' => 'Second item description'],
    ['title' => 'Third item', 'description' => 'Third item description']
];

还有以下观点:

<div class="good-block">
    <h1>{{ $good['title'] }}</h1>
    <p>{{ $good['description'] }}</p>
</div>

现在我想显示所有使用&lt;hr&gt; 作为分隔符的项目。

因此,最终的视图如下:

@foreach ($goods as $good)
    <div class="good-block">
        <h1>{{ $good['title'] }}</h1>
        <p>{{ $good['description'] }}</p>
    </div>
    <hr />
@endforeach

问题在于,很明显,分隔符将显示在最后一项之后,而不仅仅是元素之间。在简单数组的情况下implode可以作为拼接的工具。

但是如何在模板文件中使用这种方法呢?是否有不同的方法,允许保持代码干净和逻辑,而不添加不必要的条件,例如检查当前元素不是数组的最后一个元素?

谢谢!

【问题讨论】:

  • 如果你不想让 PHP 处理这个问题,你可以使用CSS 将最后一个.good-block&lt;hr/&gt; 元素的display 属性设置为none;,某事喜欢.good-block:last-child &gt; hr { display:none; }CSS 可以随时纠正)

标签: php html template-engine templating


【解决方案1】:

一个简单的技巧是保留一个 $counter,如下所示:

@$counter = 0;
@foreach ($goods as $good)
    @if ( $counter > 0 ) print '<hr />';
    <div class="good-block">
        <h1>{{ $good['title'] }}</h1>
        <p>{{ $good['description'] }}</p>
    </div>
    @$counter++
@endforeach

现在你的 hr 只会出现在你的条目之前,但它会跳过第一个。

【讨论】:

    【解决方案2】:

    您可以在 Blade 中执行此操作:

    https://laravel.com/docs/5.3/blade#loops

    @foreach ($goods as $good)
        <div class="good-block">
            <h1>{{ $good['title'] }}</h1>
            <p>{{ $good['description'] }}</p>
        </div>
        @if (!$loop->last)
        <hr />
        @endif
    @endforeach
    

    然而,如果你不使用刀片,你可以像这样在 foreach 循环中使用一个关键变量:

    @foreach ($goods as $index => $good)
        <div class="good-block">
            <h1>{{ $good['title'] }}</h1>
            <p>{{ $good['description'] }}</p>
        </div>
        @if ($index < count($goods) - 1)
        <hr />
        @endif
    @endforeach
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-21
      • 1970-01-01
      相关资源
      最近更新 更多