This plugin makes data in csv tables available in Jekyll, similar to what Jekyll already does with YAML files.
Download read_csv.rb and put it in the _plugins directory of your website.
This plugin reads all csv files found in the _csv directory and, for each file <>.csv it makes the following information available for use with Liquid:
site.data.<<name>>.rowssite.data.<<name>>.colssite.data.<<name>>.keyssite.data.<<name>>.contentsite.data.<<name>>.content_hash
where:
rowsandcolscontain, respectively, the number of rows (without headers) and the number of columns of the tablekeysis an array containing the header of the tablecontentis an array of arrays containing the table datacontent_hashis an array of hashes, to access data using the columns names set in the header.
Suppose you have an example.csv file stored in the _csv directory of your Jekyll website, with the following content:
h1,h2,h3 a,b,c 1,2,3
Then, the following Jekyll template generates an HTML representation of the table:
---
title: Example
---
<table>
<thead>
<tr>
{% for header in site.data.example.keys %}
<td>{{header}}</td>
{% endfor %}
</tr>
</thead>
<tbody>
{% for row in site.data.example.content %}
<tr>
{% for column in row %}
<td>{{column}}</td>
{% endfor %}
</tr>
{% endfor %}
</tbody>
</table>
If you prefer to access cells using header names, you can use the content_hash key. For instance, the following snippet extracts the content of column h1 and h3 from the table:
{% for row in site.data.example.content_hash %}
<tr>
<td>{{row.h1}}</td>
<td>{{row.h3}}</td>
</tr>
{% endfor %}
See the example directory for more details.
Store the table data you want to access in _data, as a YAML file.
The plugin does not check for name clashes of files stored _data and _csv directory. Do not use the same name for files in _data and _csv.
In other words, if you have a _data/w.yaml file, do not create a _csv/w.csv file.
Distributed under the terms of the MIT License