jbake-org / jbake

Java based open source static site/blog generator for developers & designers.
http://jbake.org
MIT License
1.12k stars 326 forks source link

One-off no-content templates in content directory #693

Open ge0ffrey opened 3 years ago

ge0ffrey commented 3 years ago

I have a team.html page which list all our contributors. That needs to get generated through an ftl template that reads from data/users.yml. There is no other html page like it, that would reuse this layout. It's a one-off template.

I have several other pages (download.html, documentation.html) that require a one-off template. In fact, index.html is a natural one-off template. So is feed and archive (but post and tag are not because they create multiple output pages).

What I need to do now (workaround):

1) Create a file content/community/team.html:

title=Team
type=community_team
status=published
~~~~~~

2) In jbake.properties add:

template.community_team.file=community_team.ftl

3) Create a file templates/community_team.ftl:

<#import "base.ftl" as base>
<@base.layout>
    <h1>${content.title}</h1>
    <#assign users = data.get('users.yml').data>
    <#list users as user>
       <p>${user.name}</p>
    </#list>
</@base.layout>

Proposal A) What I want to do:

1) Create a file content/community/team.html.ftl:

title=Team
status=published
~~~~~~
<#import "base.ftl" as base>
<@base.layout title="Team">
    <h1>${content.title}</h1>
    <#assign users = data.get('users.yml').data>
    <#list users as user>
       <p>${user.name}</p>
    </#list>
</@base.layout>

The output filename is the template name without the ".ftl" suffix.

Similarly, content/blog/feed.atom.ftl and content/blog/feed.rss.ftl can create an Atom and RSS feed for a single website.

Requirements:

LightGuard commented 3 years ago

I think simply put, we need to be able to have template files parsed and rendered wherever they're found.

jonbullock commented 3 years ago

Gotcha, need to work out how this fits into the pipeline (does this file get added to the content store as a piece of "content", does it actually need the metadata header etc.). Should have a better idea of the scope of work required then.

LightGuard commented 3 years ago

It should be able to access the same information as a template. Is it a piece of content? I would say yes.

ge0ffrey commented 2 years ago

@jonbullock Any progress on this issue? It's the number one issue for us. Any clues on where to start if we want to fix this ourselves?

jonbullock commented 2 years ago

@ge0ffrey No progress yet, all I can say is that it's still on my to do list.

tarilabs commented 9 months ago

Hi, if this helps I've experimented with an alternative approach which works (with limitation of file-extension, below) but does not require the workaround to define a single template instance file per each one-offs.

You can see it in action here:

The downside: in /content the file is .html and not .ftl as the file extensions which can be baked from content seems to me is fixed (and due to constraint as detailed here)

In other words I edit the /content/oneoff.html as if it's a .ftl and then I wire it into a single FTL template designed on purpose, which interprets the content body as if it was part of the originating FTL.