Джекилл жидкость, если заявление путаница - PullRequest
0 голосов
/ 01 января 2019

Я пытаюсь заставить оператор 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 в жидкой части файла уценки, удалите границу изображения баннера.

1 Ответ

0 голосов
/ 01 января 2019

Ваш тег захвата, без 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, и вы получите тот же результат.

...