Я работаю над сайтом Jekyll и пытаюсь произвести отделения на три столбца, вложенные подряд отделение. Жидкость делает это довольно легким с их cycle
фильтр:
{% for p in site.categories.post %}
{% cycle 'add rows': '', nil, nil %}
{% cycle 'close rows': nil, nil, '' %}
{% endfor %}
Однако это только действительно работает, когда существует 3, 6, 9, и т.д. сообщения. Когда общее количество сообщений не является несколькими из три, В Ruby, PHP или любом другом языке я мог легко зафиксировать это с оператором модуля, таким образом, в дополнение к
когда close rows
цикл.close rows
цикл я произвел бы if site.categories.size % 3 == 0
. Однако Жидкость, потому что это - безопасный язык шаблонной обработки, не поддерживает модуль.
Что еще может я делать для надлежащего закрытия
Для конкретного примера вы можете использовать {% цикла 'закрыть строки': nil, '
{% endfor %}
. IIRC Liquid не блокирует операцию по модулю, только символ %
. Вы можете выполнить определение модуля без использования оператора %
. Например, 14.modulo (3) => 2
вместо 14% 3
.
На данный момент единственный способ - написать жидкостный фильтр для этого. Зарегистрируйте фильтр где-нибудь в коде, где это уместно (он находится в разных местах при использовании с рельсами и без них).
Liquid :: Template.register_filter (LiquidFilters)
В каталоге проектов / lib добавьте liquid_filters.rb:
module LiquidFilters
# makes modulus operation available to templates
def mod(data, param)
data % param
end
end
После этого вы можете использовать его в своих шаблонах, как показано ниже: {{переменная | mod: 5}}
И если вам нужно использовать его для некоторой логики, вы можете зафиксировать значение.
{% capture modulus %}{{ variable | mod:5 }}{% endcapture %}
Я только что заметил, что полученное значение - это строка, поэтому для ее сравнения вы используете
{% if modulus == "0" %}
..
{% endif %}