Jekyll
Ein Jekyll-Include, das ein Ikiform-Formular aus _config.yml rendert, mit Weiterleitungen, die auf GitHub Pages und eigenen Domains funktionieren.
Jekyll-Sites sind statisch, was gut zu einem einfachen Formular-Post passt. Lege das Formular in ein Include, damit jede Seite dasselbe Markup nutzt und die Formular-ID an einer Stelle liegt.
Einrichten
Füge die Einstellungen zu _config.yml hinzu
_config.yml url: "https://example.com" ikiform: form_id: frm_xxxxxxxxxxxxxxxx thanks: /thanks/Das Include baut die Weiterleitung mit
absolute_url, und das brauchturl. Ohne diese Angabe ist die Weiterleitung nur ein Pfad, und Ikiform ignoriert alles, was keine vollständigehttps:-URL ist. Setze auf einer GitHub-Pages-Projektseite außerdembaseurl: /repo;absolute_urlhängt es für dich an.Erstelle das Include
_includes/ikiform-form.html {%- assign form_id = include.form_id | default: site.ikiform.form_id -%} {%- assign thanks = include.thanks | default: site.ikiform.thanks -%} <form class="ikiform" action="https://ikiform.com/f/{{ form_id }}" method="post"> <label>Email <input name="email" type="email" autocomplete="email" required></label> <label>Message <textarea name="message" rows="5"></textarea></label> {%- if include.subject %} <input type="hidden" name="_subject" value="{{ include.subject | escape }}"> {%- endif %} {%- if thanks %} <input type="hidden" name="_redirect" value="{{ thanks | absolute_url }}"> {%- endif %} <input name="_gotcha" type="text" tabindex="-1" autocomplete="off" hidden> <button type="submit">{{ include.button | default: "Send" }}</button> </form>Verwenden
contact.md --- layout: page title: Contact --- Questions about pricing? Write to us. {% include ikiform-form.html subject="Pricing question" %}Das Include funktioniert in Seiten, Posts und Layouts. Übergib
form_idfür ein anderes Formular,thanksfür eine andere Weiterleitung undbuttonfür den Button-Text.Füge die Dankesseite hinzu
thanks.md --- layout: page title: Thanks permalink: /thanks/ --- Thanks, we got your message.
_redirect wird nur befolgt, wenn das Formular erlaubte Domains hat, zu denen deine Site gehört. Siehe Regeln für _redirect.
Erlaubte Domains
GitHub Pages ist der übliche Host für Jekyll, daher brauchst du oft zwei Einträge: den github.io-Host und deine eigene Domain.
| Wo das Formular läuft | Zu Allowed domains hinzufügen |
|---|---|
bundle exec jekyll serve | localhost. Passt auf http://localhost:4000: Ikiform vergleicht nur den Hostnamen, nie den Port. |
| GitHub Pages | username.github.io. Projekt-Sites unter username.github.io/repo nutzen denselben Host, ein Eintrag deckt also alle ab. |
| Eigene Domain auf GitHub Pages | example.com, was auch www.example.com abdeckt |
| Netlify | your-site.netlify.app. Deploy Previews (deploy-preview-12--your-site.netlify.app) und Branch Deploys (branch--your-site.netlify.app) sind keine Subdomains davon, füge also den exakten Preview-Host hinzu, während du eine testest. |
- Füge niemals
github.ioallein hinzu. Jede Site auf diesem Host würde passen, auch die von anderen Leuten.
Test-Checkliste
- Starte
bundle exec jekyll serveund sieh dir den Seitenquelltext an. Dieactionsollte mit deiner Formular-ID enden. - Sende lokal ab. Du landest auf der Dankesseite von Ikiform:
jekyll servesetzturlaufhttp://localhost:4000, undhttp:-Weiterleitungen werden nicht befolgt. - Pushe, warte auf den Pages-Build und sende von
username.github.ioab. Prüfe, dass die Einsendung nicht als Spam markiert ist. - Sende auf deiner eigenen Domain ab und prüfe, dass du auf
/thanks/landest.
Fehlerbehebung
| Was du siehst | Warum | Lösung |
|---|---|---|
Could not locate the included file 'ikiform-form.html' | Die Datei liegt nicht in _includes, oder der Name weicht ab | Verschiebe sie nach _includes/ikiform-form.html. |
Dankesseite von Ikiform statt /thanks/ auf der Live-Site | url fehlt in _config.yml, oder das Formular hat keine erlaubten Domains | Setze url auf deine https:-Adresse und füge deine Domain hinzu. |
404 not_found nach dem Absenden | site.ikiform.form_id ist leer, daher endet die action auf /f/ | Prüfe die Einrückung unter ikiform: in _config.yml. |
Einsendungen landen im Spamfilter mit origin_mismatch | Die sendende Seite steht nicht in den erlaubten Domains des Formulars | Füge den Host aus der Tabelle oben hinzu. Mit Reject bekommen dieselben Requests stattdessen 403 origin_not_allowed. |