Data Tables
Purpose
Data Tables are reusable tabular components. Build a table once with structured columns and conditional formatting, then drop it onto any page via the Data Table block.
When to use this
- Fixture lists, fee schedules, opening hours, league standings — any tabular data that's longer than ~5 rows.
- Anything you'd otherwise paste in from a spreadsheet.
- Use Rich Text tables only for tiny 2-3 row tables. For anything larger, use a Data Table.
Key fields
- Title — internal identifier; not shown on the public site unless you embed it in a heading.
- Slug — used for the block reference.
- Columns — array of column configs: header label, data type (text, number, date, link, image), default alignment.
- Rows — array of row data, keyed by column.
- Styling — table colours, borders, alternating row shading, sticky header.
- CSV upload — paste or upload a CSV to populate Columns + Rows in one step.
- URL import — fetch CSV from a public URL on a schedule. Useful for league standings or weather data.
- Conditional formatting — Datadog-style rules: "if score < par then green background".
Common tasks
Build a fixture list
- Content > Data Tables, Create New.
- Define columns: Date, Home, Away, Time, Venue.
- Either enter rows manually or paste a CSV into the CSV input.
- Save. Then on a Page, add a Data Table block and pick this table.
Update from a CSV
- Open the existing table.
- Click Import from CSV, paste new data.
- The system tries to match columns by header name. Confirm and Save.
Schedule a URL refresh
- In the Data Table, set URL import.
- Pick a refresh interval (hourly, daily).
- The CSV at that URL is fetched on schedule and rows are replaced.
Gotchas
- Headers must match across CSV imports to update rows in place — otherwise you'll get a fresh set.
- URL import requires a publicly accessible CSV. Authenticated endpoints aren't supported.
- Large tables (>500 rows) hurt page render time. Paginate by splitting into multiple tables or by using a search interface.
- Conditional formatting rules are evaluated per cell, so complex per-row logic (e.g. "if this row's score < last row's score") isn't possible.
Related
Still need help? Open the chat assistant in the corner, or send us a message.
