Search code examples
jekyllliquid

Item.Image not displaying in Jekyll


I have a bunch of portfolio posts in /_works/ and the front matter looks something like this:

title: "Rock in Rio Lisbon 2018"
date: July, 2018
image: "/assets/images/work/rock-in-rio-lisbon-2018.jpg"
categories:
  - Intro
slides:
  - title: "Rock in Rio Lisbon 2018 Headliner Show for Bruno Mars, Katy Perry, Muse & The Killers"
    id: "O-rZ6IFnv9g"

override: true

On the homepage I'm using the Slides.ID to automatically grab the YouTube video's thumbnail. If the front matter includes Override: true it should display what I have defined as the image instead. Here is the what I have:

{% assign works = site.works | reverse %}
{% for item in works limit:9 %}
<li class="{% cycle 'wide','','','','','','','','' %}">
<a href='{{ site.url }}{{ item.url }}'>


    {% if item.override %}
    {% for item in item.slides limit:1 %}
        <img alt="A frame from a video of {{ item.title }}" loading="lazy" src="{{ site.url }}{{ item.image }}" />
    {% endfor %}
    {% else %}
    {% for item in item.slides limit:1 %}
        <img alt="A frame from a video of {{ item.title }}" loading="lazy" src="https://img.youtube.com/vi/{{ item.id }}/sddefault.jpg" />
    {% endfor %}
    {% endif %}

    <div class='overlay'>
    <div class='thumb-info'>
        <h3>{{ item.title }}</h3>
        <p>{{ item.categories | sort |  join:" • " | escape }}</p>
        <p>{{ item.image }}</p>
    </div>
    </div>
</a>
</li>      
{% endfor %}

When Jekyll compiles, the {{ item.image }} is not working…however, if I swap it with {{ item.title }} it does work. Any ideas why this is happening?


Solution

  • You are reusing the 'item' variable in slides, which overwrites it. Rename the variable 'item' to 'slide' when you are looping through the slides, like this:

    {% assign works = site.works | reverse %}
    {% for item in works limit:9 %}
    <li class="{% cycle 'wide','','','','','','','','' %}">
    <a href='{{ site.url }}{{ item.url }}'>
    
    
        {% if item.override %}
        {% for slide in item.slides limit:1 %}
            <img alt="A frame from a video of {{ slide.title }}" loading="lazy" src="{{ site.url }}{{ slide.image }}" />
        {% endfor %}
        {% else %}
        {% for slide in item.slides limit:1 %}
            <img alt="A frame from a video of {{ slide.title }}" loading="lazy" src="https://img.youtube.com/vi/{{ slide.id }}/sddefault.jpg" />
        {% endfor %}
        {% endif %}
    
        <div class='overlay'>
        <div class='thumb-info'>
            <h3>{{ item.title }}</h3>
            <p>{{ item.categories | sort |  join:" • " | escape }}</p>
            <p>{{ item.image }}</p>
        </div>
        </div>
    </a>
    </li>      
    {% endfor %}