Модуль (или отсутствие этого) в Жидкой шаблонной обработке Ruby механизма

Я работаю над сайтом Jekyll и пытаюсь произвести отделения на три столбца, вложенные подряд отделение. Жидкость делает это довольно легким с их cycle фильтр:

{% for p in site.categories.post %}
    {% cycle 'add rows': '
', nil, nil %} {% cycle 'close rows': nil, nil, '
' %} {% endfor %}

Однако это только действительно работает, когда существует 3, 6, 9, и т.д. сообщения. Когда общее количество сообщений не является несколькими из три,

никогда не закрывается - для концов цикла, прежде чем закрывающий тэг сможет быть произведен как часть close rows цикл.

В Ruby, PHP или любом другом языке я мог легко зафиксировать это с оператором модуля, таким образом, в дополнение к close rows цикл я произвел бы

когда if site.categories.size % 3 == 0. Однако Жидкость, потому что это - безопасный язык шаблонной обработки, не поддерживает модуль.

Что еще может я делать для надлежащего закрытия

когда общее количество сообщений не является несколькими из три?

22
задан halfer 10 February 2018 в 18:30
поделиться

3 ответа

Для конкретного примера вы можете использовать {% цикла 'закрыть строки': nil, '

', '
' %} после {% endfor %}.

13
ответ дан 29 November 2019 в 04:33
поделиться

IIRC Liquid не блокирует операцию по модулю, только символ % . Вы можете выполнить определение модуля без использования оператора % . Например, 14.modulo (3) => 2 вместо 14% 3 .

1
ответ дан 29 November 2019 в 04:33
поделиться

На данный момент единственный способ - написать жидкостный фильтр для этого. Зарегистрируйте фильтр где-нибудь в коде, где это уместно (он находится в разных местах при использовании с рельсами и без них).

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 %}
8
ответ дан 29 November 2019 в 04:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: