emacs-love / weblorg

Static Site Generator for Emacs
https://emacs.love/weblorg
GNU General Public License v3.0
278 stars 20 forks source link

As blogger I want to be able to categorize my posts, so that my posts be organized. #5

Open guilhermecomum opened 3 years ago

clarete commented 3 years ago

There are a few things we need in order to get this working:

  1. the code for generating the pages for each category. the snippet below will generate a directory for each category name with an index.html file within it:

    (weblorg-route
     :name "categories"
     :input-pattern "posts/*.org"
     :input-aggregate #'weblorg-input-aggregate-by-category ;; also look at weblorg-input-aggregate-by-category-desc
     :template "category.html"
     :output "blog/{{ name }}/index.html"
     :url "/blog/{{ name }}")
    ;; the template will link to the `posts` route with `url_for`.
    (weblorg-route
     :name "posts"
     :input-pattern "posts/*.org"
     :template "post.html"
     :output "blog/{{ slug }}.html"
     :url "/blog/{{ slug }}.html")
  2. The category.html template present in the templates path (we don't have any themes shipping this file yet 😢)
    {% extends "layout.html" %}
    {% block body %}
      <div class="title"><h1>{{ category.name }}</h1></div>
      <div class="content">
        <ul>
          {% for post in category.posts %}
            <li>
              <span class="pubdate">{{ post.date }}</span>
              <a href="{{ url_for("posts", slug=post.slug) }}">{{ post.title }}</a>
            </li>
          {% endfor %}
        </ul>
      </div>
    {% endblock %}