2017-08-25 53 views
0

這可能聽起來像一個簡單的問題,但我有點難住。SilverStripe 3.1:將列表劃分爲垂直列(可變長度)

我試過使用模和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和第2列,3 & 4(實際列表可以是任何長度):

1月11日 - 下午7點30分 - POWERSTOCK 小屋,DT6 3TB BOX OFFICE:01935 873555 /網站 訂票:£10.00 /£8.00

13年10月2日 - 地方 BEDFORD BOX OFFICE:/網站

14年10月3日 - 前瞻:PLACE 貝德福德 票房:/網站

18年10月4日 - CHILWELL藝術中心 比斯頓

回答

2

需要自定義iterator屬性。您有$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 %> 
+0

完美。恥辱$ Middle不符合你的期望,或者他們沒有$中值作爲標準。 – pinkp