Jekyll liquid if путаница в утверждениях

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

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
1
0
361
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

ну, похоже, это работает. почему тег захвата не работает, если он должен извлекаться из одной страницы и тегов публикации?

Michael SanAngelo 01.01.2019 23:23

Я добавил к ответу подробное объяснение. Надеюсь, это поможет!

Robert Buchberger 02.01.2019 09:27

Другие вопросы по теме