Я пытаюсь заставить оператор if работать в соответствии с жидким заголовком моего сообщения уценки, где, если для переменной установлено значение true, сделайте что-нибудь, иначе, а если оно не существует, сделайте другое. Просто не могу заставить его работать должным образом.
Я пробовал изменить оператор if на {% unless %}. пробовать разные комбинации != false и менять местами код изображения.
{% capture banner %}{{ page.banner }}{{ post.banner }}{% endcapture %}
{% capture no-border %}{{ page.no-border }}{{ post.no-border }}{% endcapture %}
{% capture title %}{{ page.title }}{{ post.title }}{% endcapture %}
{% if banner != "" %}
{% if no-border == true %}
<img class = "center no-border" src = "{{ banner }}" alt = "{{ title }}"/><br/>
{% else %}
<img class = "center" src = "{{ banner }}" alt = "{{ title }}"/><br/>
{% endif %}
{% endif %}
Я ожидал увидеть: если для no-border установлено значение true в жидкой части файла уценки, удалите границу изображения баннера.






Тег захвата без page.no-border или post.no-border возвращает пустую строку, которая оценивается как истина, потому что все значения в жидкости истинны, за исключением false и nil. Попробуйте вместо этого (или что-то в этом роде):
{% capture banner %}{{ page.banner }}{{ post.banner }}{% endcapture %}
{% capture title %}{{ page.title }}{{ post.title }}{% endcapture %}
{% if page.banner or post.banner %}
{% if page.no-border or post.no-border %}
<img class = "center no-border" src = "{{ banner }}" alt = "{{ title }}"/><br/>
{% else %}
<img class = "center" src = "{{ banner }}" alt = "{{ title }}"/><br/>
{% endif %}
{% endif %}
Все это не проверено, и вы можете сделать это несколькими способами.
Обновлено: Разъяснение
capture - это функция. Он оценивает все, что находится внутри, и сохраняет это как строку в переменной. Если содержимое - nil (ничего), то возвращается пустая строка ("").
В программировании каждое значение считается «правдивым» или «ложным». Это означает (среди прочего), что при помещении в оператор if истинные значения будут выполнять оператор, а ложные - нет. Возьмем, например, целое значение 1; в большинстве языков это истинное значение, поэтому
if 1
puts 'hello world'
end
напечатает на консоли «привет, мир». nil обычно является ложным значением, поэтому
if nil
puts 'hello world'
end
ничего не будет делать.
Какие именно значения являются правдивыми или ложными, зависит от языка программирования. В Liquid все правда кроме nil и false. capture всегда возвращает строку, и все строки, даже пустые, являются правдивыми.
Если вы напишете это:
{% if "" %}
<img class = "center no-border" src = "{{ banner }}" alt = "{{ title }}"/><br/>
{% else %}
<img class = "center" src = "{{ banner }}" alt = "{{ title }}"/><br/>
{% endif %}
Вы всегда получите версию без границ. Замените этот оператор if на if "true" или if true, и вы получите тот же результат.
Я добавил к ответу подробное объяснение. Надеюсь, это поможет!
ну, похоже, это работает. почему тег захвата не работает, если он должен извлекаться из одной страницы и тегов публикации?