Version 1.1.0
12.03.2019

Web-Requests, Collections, Image-Processing, Javascript-Filter und einiges mehr…

Mit mark2web Version 1.1 können Sie Ihre statische Seite durch externe Inhalte aus JSON-Api’s anreichern. Einer Anbindung an eine Headless-CMS steht somit nichts mehr im Weg.

mark2web

Web-Requests

Anfrage an JSON-Api’s von z.B. Headless-CMS können über zwei Wege realsiert werden:

1. Collections

Dazu wird die config.yml um z.B. folgende Einträge ergänzt:

This:
  Collections:
    - Name: blog
      URL: 'https://HEADLESS-CMS-SERVER.de/api/collections/get/mark2webBlog?token={{ Data.token }}&filter[published]=true&sort[date]=-1'
      NavTemplate:
        EntriesAttribute: entries
        GoTo: '{{ date }}-{{ title }}'
        Navname: '{{ title }}'
        Body: '{{ body }}'
        Template: base_blog_details.html
        DataKey: details
        Hidden: true # hide from nav, but use this feature for rendering detail sites

Der entsprechende Teil im Template sieht dann z.B. wie folgt aus:

{% for e in NavElement.ColMap.blog.entries %}
 <h2>{{ e.title }}</h2>
 ...
 <a href="{{ e.date|add:"-"|add:e.title|slugify }}">mehr lesen</a<
{% endfor }

2. fnRequest Template-Funktion

Das Beispiel aus 1. kannber auch im Template folgendermaßen realisiert werden:

{% for e in fnRequest("https://HEADLESS-CMS-SERVER.de/api/collections/get/mark2webBlog?token="|add:Data.token|add:"&filter[published]=true&sort[date]=-1").entries %}
 <h2>{{ e.title }}</h2>
 ...
 <a href="{{ e.date|add:"-"|add:e.title|slugify }}">mehr lesen</a<
 {{ fnRender("base_blog_details.html", e.date|add:"-"|add:e.title, e, "details", e.body) }}
{% endfor %}

Beachten Sie hier den fnRender() Aufruf. Die Unter-, bzw. Detail-Seiten werden hier über den Aufruf im Template generiert. fnRender() gibt einen leeren String zurück und kann somit an beliebiger Stelle im Template stehen.

Image-Processing

Für die Berechnung unterschiedlicher Bildgrößen wurde der Template-Filter image_process eingeführt:

<img 
  src="{{ Data.background|image_process:"p=fill,w=1440,h=810,q=30" }}" 
  srcset="{{ Data.background|image_process:"p=fill,w=768,h=768,q=30" }} 768w,
          {{ Data.background|image_process:"p=fill,w=1440,h=810,q=30" }} 1440w,
          {{ Data.background|image_process:"p=fill,w=1920,h=1020,q=30" }} 1920w">

Weitere Bearbeitungsmöglichkeiten entnehmen Sie der Dokumentation, die in Kürze folgen wird.

Javascript Filter

Um den Funktionsumfang der Django-Templates zu erweitern, ist es möglich eigene Filter in Javascript zu schreiben. Eigene Filter werden im Ordner templates/filters abgelegt. Die Dateinamen vor dem .js dienen als Filternamen im Template.

Z.B datum.js um das Datumsformat YYYY-MM-DD in DD.MM.YYYY umzuwandeln:

function datum(str, param) {
  /*
  this.context.Meta.Title ist hier z.B. möglich
  */
  return str.replace(/^([0-9]+)[^0-9]+([0-9]+)[^0-9]+([0-9]+).*/, "$3.$2.$1");
}

module.exports = datum;

weitere Template-Filter und -Variablen

Außerdem sind folgende zusätzliche Filter bereits eingebaut:

json Filter

{{ Data|json:"pretty" }}

dump Filter

{{ Data|dump }}

Timestamp Variable

<link rel="stylesheet" type="text/css" href="assets/css/main.css?{{ Timestamp }}">

« zurück