Механизм выражения: разделение записей на группы

#content-management-system #expressionengine

#система управления контентом #expressionengine

Вопрос:

Краткий вопрос: как я могу разделить все записи из данного канала на группы по 4, вот так:

 <div class="entry_group">
    <div class="entry" id="1"><span>{title}</span></div>
    <div class="entry" id="2"><span>{title}</span></div>
    <div class="entry" id="3"><span>{title}</span></div>
    <div class="entry" id="4"><span>{title}</span></div>
</div>
<div class="entry_group">
    <div class="entry" id="5"><span>{title}</span></div>
    <div class="entry" id="6"><span>{title}</span></div>
    <div class="entry" id="7"><span>{title}</span></div>
    <div class="entry" id="8"><span>{title}</span></div>
</div>
  

Заранее спасибо!

Ответ №1:

Вы можете попробовать использовать плагин Modulo Operator для достижения этой цели с любым количеством записей. Что-то вроде этого:

 {if count == "1"}
    <div class="entry_group">
{/if}
{if '{exp:modulo dividend="{count}" divisor="4"}' == 0}
    </div>
    <div class="entry_group">
{/if}
        <div class="entry" id="{count}"><span>{title}</span></div>
{if count == total_results}
    </div>
{/if}
  

Плагин предназначен только для EE1, но преобразовать плагин из EE1 в EE2 проще простого.

Комментарии:

1. Спасибо @D-Rock! Кажется, кто-то уже конвертировал плагин для EE2: Ссылка для скачивания

Ответ №2:

Я нашел другое, гораздо более простое решение на форумах ExpressionEngine; хотя оно и довольно простое, я думаю, что оно должно довольно легко достичь желаемой цели: http://expressionengine.com/forums/viewthread/197240/#927740

Суть этого заключается в использовании переменной {switch} для необязательной вставки закрывающих и открывающих пар тегов после каждой n группы записей, в зависимости от того, сколько пустых мест вы оставляете в switch. В вашем случае пример был бы примерно таким:

 <div class="entry_group">
{exp:channel:entries}
    <div class="entry" id="{switch='1|2|3|4'}"><span>{title}</span></div>
    {switch='|||</div><div class="entry_group">'}
{exp:channel:entries}
</div>
  

Пробелы между div и class=entry_group не должны вызывать никаких проблем, но если это произойдет, вы можете захотеть использовать CSS для управления свойствами контейнеров без необходимости помещать в них класс (например, .entry_list>div{... и .entry_list>div .entry{...

Ответ №3:

Я нашел полурешение на форумах Expression Engine, но для этого требуется ограничение на общее количество записей.