Grund: vad module-contact-form är

module-contact-form är CCMS formulärmodul för inkommande kontaktärenden med inbyggd klientvalidering och Turnstile-skydd.

Modulen är designad för tydlig lead-insamling: du väljer vilka fält som visas, vilka som är obligatoriska och vilka texter användaren ser i varje steg.

Formuläret används ofta tillsammans med module-contact i samma sektion, men kan konfigureras separat.

Val 1: kärnnycklar och fältstruktur

Top-level ligger i contact_form med nycklar som module_type, display, appearance, aria_label, id, language, submit_button_text, success_message och error_message.

Fältsektionerna är:

  • text1, text2, text3
  • email, phone, dropdown, file, textarea
  • terms och messages

Språkvarianter följer mönstret <lang>_contact_form, till exempel en_contact_form.

Val 2: fältaktivering, required och validering

Varje fältblock använder display för att visas/döljas och kan ha name, key, label, placeholder, maxlength och required.

Builden omvandlar required till required_attr så templaten kan rendera attributet konsekvent.

Klientvalidering använder webbläsarens checkValidity() och läser feltexter från contact_form.messages.* med variabler som och .

Val 3: terms, statusflöde och filfält

terms.display visar en villkorsrad med länk. Innehållet i terms.content_json parseas i runtime och visas i en enkel dialog/alert.

messages.* styr både valideringsfel och statussteg som status_precheck, status_robot, status_sending, status_done och status_timeout.

file-fältet kan visas i UI, men nuvarande runtime blockerar faktisk filuppladdning och visar i stället ett informationsmeddelande vid klick.

Val 4: endpoint, Turnstile och submit-payload

Formuläret skickas till site.api_endpoints.contact_form (eller dev-endpoint på *.pages.dev). Endpoints som inte är https:// blockeras direkt.

Innan submit hämtas en färsk Turnstile-token via ensureTurnstileToken(). Payloaden skickas som JSON med data, formId, language och token i både header och body.

Vid lyckad submit tas formulärkortet bort från DOM och användaren får success-text via statusdialogen.

Val 5: SEO, AI-optimering och datakvalitet

Formcopy ska vara konkret och intentspecifik: tydliga labels, tydliga placeholders och exakt feedback vid fel. Det förbättrar både konvertering och AI-tolkning av sidans syfte.

Översätt alla synliga texter i <lang>_contact_form, inklusive messages.*, för konsekvent upplevelse i varje språkversion.

Formulärmodulen bör normalt inte duplicera global schema-data. Låt i stället global struktur bära Organization/LocalBusiness-signalerna.