SilverStripe 3.1:将列表分为垂直列(可变长度)

时间:2017-08-25 20:07:56

标签: multiple-columns silverstripe

这可能听起来像一个简单的问题,但我有点难过。

我尝试过使用Modulus和MultipleOf https://docs.silverstripe.org/en/3/developer_guides/templates/syntax/ 但是这给了我一个横向的列表。我想要两列第一列包含我列出的数据对象的前半部分,第二列包含后半部分。

使用CSS不起作用,因为它拆分内容并忽略li容器,因此我的一些列表项(每行多行)被分割。 https://www.w3schools.com/Css/css3_multiple_columns.asp

我真的希望能够找到中间数据对象并使用html / css进行划分。欢迎任何建议。

以下是我的列表示例,其中显示了4个项目,第1列将包含项目1& 2和3列,3& 4(实际列表可以是任何长度):

1月5日 - 7:30 - POWERSTOCK 小屋,DT6 3TB BOX OFFICE:01935 873555 / WEBSITE 门票:£10.00 /£8.00

2 OCT 13 - THE PLACE 贝德福德 BOX OFFICE:01234 354321 / WEBSITE

3 OCT 14 - 预览:地点 贝德福德 BOX OFFICE:01234 354321 / WEBSITE

4月18日 - CHILWELL艺术中心 比斯顿

1 个答案:

答案 0 :(得分:2)

您需要一个自定义迭代器属性。您可以通过核心向$First$Last$Middle提供,但$Middle并不能满足大多数人的期望。而不是在中值迭代上返回true,它只是在第一个和最后一个之间的任何东西,这通常没有帮助。

class MyIteratorProperties implements TemplateIteratorProvider
{   
    protected $totalItems;

    protected $pos;

    public static function get_template_iterator_variables()
    {
        return ['Median'];
    }

    public function iteratorProperties($pos, $totalItems)
    {
        $this->pos = $pos;
        $this->totalItems = $totalItems;
    }

    public function Median()
    {
        return $this->pos == floor($this->totalItems/2);
    }

}

你的模板:

<% $loop $SomeItems %>
    <% if $Median %></div><div ...><% end_if %>
<% end_loop %>