DEV Community

Cover image for Data files in Jekyll
David Large for CloudCannon

Posted on • Updated on • Originally published at cloudcannon.com

Data files in Jekyll

By Farrel Burns

Brought to you by CloudCannon, the Git-based CMS for Jekyll.

What you’ll learn here:

  • Creating Jekyll data files to act as a database alternative

  • Using data files to populate a Google Map

    # Starting repo
    git clone https://github.com/CloudCannon/jekyll-learn-blog-template.git

    # Starting branch:
    git checkout data-intro-start

    # Finished branch:
    git checkout data-intro-finish
Enter fullscreen mode Exit fullscreen mode

What are Jekyll data files?

Sometimes you also need supplemental data to use on pages, but not as its own page, much like from a database or API. Jekyll allows you to create data files and access them globally, just like collections. This way you can maintain your own mini-databases, but with very little setup needs. A number of file formats are supported, including JSON, YAML, CSV (comma-separated values), and TSV (tab-separated values).

In this example, we will create a page making use of Google Maps. Then we will use a data file to populate the map with real locations of our amazing endangered birds. Read more on data files on Jekyll’s official site.

Creating data files

First, let’s follow the usual conventions. If you haven’t already guessed it, we need to create a _data folder for our files. Then, we can create a <filename>.yml file with our data. For convenience, in the root of the project, data.zip has been added, with locations.yml (with coordinates of our birds and any supporting information) and staff.yml. Simply unzip these files into _data.

Data use case 1 - location map

Now that we have our data files, we can simply access locations.yml through site.data.locations. No need for any more setup in _config.yml, unlike collections.

To make things easier, a few things have already been set up that aren’t the focus of this lesson:

  • js/map.js with the necessary JavaScript code for working with a (development) Google Map (feel free to have a look if you aren’t familiar with Google Maps setup, or would like to see the marker setup).
  • locations.html with script tags linking map.js and initializing the map.

All we need to do is use the data, which we can transform into JSON with the jsonify filter. Simply add this to the last script tag in locations.html:

    <script>
      let markers = {{ site.data.locations | jsonify }};
      google.maps.event.addDomListener(window, 'load', initializeMap);
    </script>
Enter fullscreen mode Exit fullscreen mode

When we view the page in the browser, all markers should now be visible. We can add more markers to the data file and it will be populated on the next Jekyll build.

Data use case 2 - list of staff

Another great use of data is simple information about people, such as jobs or contacts.

One thing that might make sense here is to provide staff contact details for sightings of rare birds. Then staff members could be contacted to update the locations.yml file. We already have staff.yml in our _data folder, with some simple contents (randomly generated names and a placeholder image).

Now we can simply add a new block below our map on locations.html:

    <div class="contact">
      <h2 class="contact__heading">Report a sighting</h2>
      <p>If you think you've spotted an endangered species, please contact one of our friendly staff to let them know.</p>
    </div>
    <div class="staff">
      {% for person in site.data.staff %}
        <div class="staff-member">
          <img class="staff-member__image" src="{{ person.image }}" alt="Image of {{ person.name }}">
          <div>
            <p class="staff-member__name">{{ person.name }}</p>
            <p>Contact options: </p>
            <ul class="staff-member__contacts">
              <li><a class="option" href="#">Email</a></li>
              <li><a class="option" href="#">Facebook</a></li>
              <li><a class="option" href="#">Twitter</a></li>
            </ul>
          </div>
        </div>
      {% endfor %}
    </div>
Enter fullscreen mode Exit fullscreen mode

This will output all of our staff information, including names, images, and links (just home pages for now) to their email/social media. If we want to add more information or more staff, it is now easier to manage.

What’s next?

This is the end of the Jekyll beginner tutorial. We have dealt with all of the major topics in Jekyll and built a basic but decent-looking site. Hopefully you now feel confident putting together an easily maintainable static site.

Of course, Jekyll is not a CMS. If you wish to deploy your site into the wider world and have other people contribute to it - especially non-technical content editors - CloudCannon offers an easy-to-use and beautiful CMS solution.

Top comments (0)