Как обнаружить изменение «состояния» и что-то отобразить? - PullRequest
3 голосов
/ 21 марта 2011

В Plone 3.3.5 у меня есть классическая папкаcontents, представляющая собой список событий, отсортированных по дате (в обратном порядке).Я показываю каждый элемент один за другим.Я хотел бы отобразить специальное сообщение, когда события больше не в будущем, но являются событиями прошлого.

На данный момент у меня есть это:

  <span tal:define="endDate item/end; 
           " tal:condition="python: endDate.isPast()">Past event<br />
  </span>

Но я хотел бы отображать толькооднажды это сообщение и не для всех прошлых событий ...

Я пытался создать переменную Python, но не смог этого сделать (путаница с необъявленной переменной).

Спасибо за помощь

PS: я совсем не знаком с языком шаблонов Plone ...

Ответы [ 4 ]

3 голосов
/ 21 марта 2011

Проще всего было бы сделать из них два списка, по которым вы итерируете: один для будущих событий и один для прошлых событий.Затем вы можете просто поместить «Прошлые события» в качестве заголовка между списками.

1 голос
/ 22 марта 2011

Вы можете «фильтровать» в listFolderContents точно так же, как вы можете фильтровать при поиске по каталогу.Чтобы узнать, как это сделать, см. http://collective -docs.plone.org / content / list.html # receive-folder-objects-filter * .Уже есть «конечный» индекс, который вы можете включить в свой фильтр, см. http://plone.org/documentation/manual/plone-community-developer-documentation/searching-and-indexing/query#querying-by-date

1 голос
/ 22 марта 2011

Ну, это может показаться немного сложным, потому что этот подход становится естественным при управлении набором результатов БД.

Вы можете обратиться сюда: http://docs.zope.org/zope2/zope2book/AppendixC.html#the-following-information-is-available-from-the-repeat-variable

Оператор tal: repeat очень мощный, и в вашем случае вы можете рассчитывать на «первую» переменную информацию.

Вместо простого списка событий попробуйте перебрать список словарей, в которых вы позаботились о информации isPast.

Запустите следующий (простой и брутальный) код tal ... он говорит сам за себя.

<div tal:define="past string:Past events;
                 future string:Events to Come;
                 richList python:[{'event':'event1', 'passed': past},
                                  {'event':'event2', 'passed': future},
                                  {'event':'event3', 'passed': past},
                                  {'event':'event4', 'passed': future}];
                 dummy python:richList.sort(lambda x,y:cmp(x['passed'], y['passed']))">    


    <tal:block repeat="item richList">
        <h2 tal:condition="repeat/item/first/passed"
            tal:content="item/passed">
            Past Events or Future
        </h2>
      <a tal:content="item/event">event's url</a>
        </tal:block>

    </div>

Вы можете создать свой richList, повторяющийся в результате вызова каталога. И вы можете создать элемент словаря, устанавливающий «переданное» значение в соответствии с функцией event / end / isPast.

надеюсь, это поможет.

1 голос
/ 21 марта 2011

Вы можете сосчитать события в будущем и отобразить соответствующее сообщение, если оно станет 0.

См. Коллекцию "events" в корне портала для примера этого.

...