Formulare im Theme
Das form-Tag, wählbare Formulare per Setting, eindeutige Feld-IDs und eigenes JavaScript gegen den Endpunkt /api/submit.
Das form-Tag
{% form section.settings.form_handle | default: 'contact' %}
<div class="field">
<label for="name-{{ section.id }}">Name</label>
<input type="text" id="name-{{ section.id }}" name="name" required>
</div>
<div class="field">
<label for="email-{{ section.id }}">E-Mail</label>
<input type="email" id="email-{{ section.id }}" name="email" required>
</div>
<div class="field">
<label for="message-{{ section.id }}">Nachricht</label>
<textarea id="message-{{ section.id }}" name="message" rows="5"></textarea>
</div>
<button type="submit">Absenden</button>
{% endform %}
{% schema %}
{
"name": "Kontaktformular",
"enabled_on": { "groups": ["body"] },
"settings": [
{ "type": "form", "id": "form_handle", "label": "Formular", "default": "contact" }
],
"presets": [ { "name": "Kontaktformular" } ]
}
{% endschema %}Das Tag rendert:
<form action="/api/submit" method="POST" data-form-type="contact">
<input type="hidden" name="form_id" value="contact">
<input type="text" name="_hp" … aria-hidden="true"> <!-- Honeypot -->
…deine Felder…
</form>Das Honeypot-Feld
_hpwird automatisch eingefügt – nicht selbst anlegen.Die
name-Attribute der Felder sind die Feldschlüssel, die im Dashboard, in „Erlaubte Felder“ und in der Datensatz-Bindung erscheinen.Nutze
section.idfürid-Attribute, da eine Section mehrfach auf einer Seite stehen kann.
Absenden per JavaScript
Für Erfolgsmeldungen ohne Seitenwechsel sendest du das Formular per fetch als JSON:
form.addEventListener('submit', async (event) => {
event.preventDefault()
const data = Object.fromEntries(new FormData(form))
const { form_id, _hp, ...fields } = data
const res = await fetch('/api/submit', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ form_id, fields, _hp, _time: Date.now() - startedAt })
})
if (res.ok) showSuccess()
else showError(res.status)
})Die Antwortcodes beschreibt der Artikel „Formular-Endpunkt /api/submit“ in der Kategorie API & Integrationen.
Unser Support antwortet in der Regel innerhalb eines Werktags.