2016-10-31 6 views
0

Я хочу сгруппировать свои встречи на startDate (а затем на lawyer.fullName).
Так что я хочу отобразить startDate назначения, только если предыдущая встреча startDate отличается.
Это то, что я пробовал. Но я действительно не знаю, как я могу получить объект из предыдущей операции. линия 3 где терпеть неудачу происходит прямо сейчас ...Сравните текущий элемент с предыдущим в f: для цикла

<f:widget.paginate objects="{appointments}" as="paginatedAppointments"> 
     <f:for each="{paginatedAppointments}" as="appointment" iteration="i"> 
      <f:if condition="{appointment.startDate->f:format.date(format:'d.m.Y')} != {0:paginatedAppointments.{i.index-1}.startDate->f:format.date(format:'d.m.Y')}"> 
       <f:then> 
        <br/> 
        {appointment.startDate->f:format.date(format:'d.m.Y')}<br/> 
        {appointment.startTime->f:format.date(format:'H:i')}<br/> 
        {appointment.lawyer.fullName}<br/><br/> 
       </f:then> 
       <f:else> 
        {appointment.startTime->f:format.date(format:'H:i')}<br/> 
        {appointment.lawyer.fullName}<br/> 
        <br/><br/> 
       </f:else> 
      </f:if> 
     </f:for> 
</f:widget.paginate> 

Имейте в виду, если у вас есть ответ: Я действительно хотел бы продолжать использовать этот полезный виджет постраничной, если это возможно.

--Edit--

Я заметил, что ответ из другой вопрос решается мой вопрос совершенно с точки зрения группировки для DateTime объектов таким образом, я отметил мой вопрос, как дубликат. Благодаря ответу Джигала я нашел его, потому что забыл о f:groupedFor.

ответ

1

Вы можете создать ViewHelper с некоторым значением для сравнения как аргумент, который сохраняет startDate в статической переменной и возвращает true/false, если он отличается от последнего. Это также полезно, если у него есть какие-то функции сброса, так что-то вроде этого:

{vendor:utility.compareLast(reset:1)} 

     <f:for each="{paginatedAppointments}" as="appointment" iteration="i"> 
      <f:if condition="{vendor:utility.compareLast(value:'{appointment.startDate->f:format.date(format:\'d.m.Y\')}')}"> 
... 
+0

Поскольку я никогда не создавал ViewHelper, прежде чем это займет слишком много времени, чтобы изучить это прямо сейчас, но я посмотрю на это позже - спасибо! –

+0

Создание ViewHelper настолько просто, что не стоит его создавать. –

+0

Хорошо, я постараюсь сделать одно - спасибо за мотивацию! :) –

1

Используйте f:groupedFor ViewHelper и вы можете сгруппировать элементы по STARTDATE. Во внутреннем цикле вы можете проверить итератор, если он первый и отобразить startDate в этом случае. См. Fluid Guide

+0

, к сожалению, это не работает для хорошо DateTimeObjects, по-видимому, не в моем случае - это хорошо работает для группировки юристами! –

+0

Возможно, он не был предназначен для работы с DateTimeObjects. Посмотрите в основном коде, чтобы увидеть, что мешает ему работать. –