Примечание.
Мне не удалось заставить плагин sorted_for
работать на моем компьютере, поэтому я протестировал свое решение с помощью обычного for
.
Шаг 1
Поскольку вы не можете использовать forloop.index
, потому что вы отфильтровываете на некоторых страницах вам нужно подсчитать циклы самостоятельно, записав в переменную с помощью assign
.
Следующий код просто перечислит ваши страницы с правильным итератором цикла (подсчитывая только те страницы, которые действительно перечислены):
{% assign loopindex = 0 %}
{% for page in site.pages %}
{% if page.type == 'project' %}
{% assign loopindex = loopindex | plus: 1 %}
<div class="span3">{{ loopindex }} {{ page.title }}</div>
{% endif %}
{% endfor %}
Шаг 2
Вам нужно отображать <div class="row">
с каждой первой строкой и </div>
с каждой четвертой строкой.
Чтобы найти первую и четвертую строки, вы можете использовать modulo
:
{% assign loopindex = 0 %}
{% for page in site.pages %}
{% if page.type == 'project' %}
{% assign loopindex = loopindex | plus: 1 %}
{% assign rowfinder = loopindex | modulo: 4 %}
<div class="span3">{{ loopindex }} {{ rowfinder }} {{ page.title }}</div>
{% endif %}
{% endfor %}
rowfinder
всегда будет повторять последовательность 1, 2, 3, 0.
Шаг 3:
Таким образом, вы отображаете <div class="row">
, когда rowfinder
равно 1
, и </div>
, когда rowfinder
равно 0
:
{% assign loopindex = 0 %}
{% for page in site.pages %}
{% if page.type == 'project' %}
{% assign loopindex = loopindex | plus: 1 %}
{% assign rowfinder = loopindex | modulo: 4 %}
{% if rowfinder == 1 %}
<div class="row">
<div class="span3">{{ page.title }}</div>
{% elsif rowfinder == 0 %}
<div class="span3">{{ page.title }}</div>
</div>
{% else %}
<div class="span3">{{ page.title }}</div>
{% endif %}
{% endif %}
{% endfor %}
Шаг 4:
Остается только одна маленькая вещь: когда количество страниц не кратно 4, в конце не хватает </div>
.
Когда количество страниц равно кратному 4, последнее значение rowfinder
будет 0
.
Таким образом, нам просто нужно отобразить </div>
, когда значение rowfinder
не равно _23 _. < br> Так что просто поместите это после цикла for:
{% if rowfinder != 0 %}
</div>
{% endif %}
...вот и все!
person
Christian Specht
schedule
06.01.2014