Ваш тег захвата, без page.no-border
или post.no-border
, возвращает пустую строку, которая оценивается как true, потому что все значения в жидкости являются правдивыми, за исключением 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
выведет «hello world» на консоль.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
, и вы получите тот же результат.