ID du formulaire

Hugo

Un partial et un shortcode Hugo qui affichent un formulaire Ikiform à partir des paramètres du site, dans les layouts et dans le contenu Markdown.

Hugo génère du HTML simple, et un envoi de formulaire classique est tout ce dont Ikiform a besoin : il n'y a donc aucun JavaScript à ajouter. Le seul piège propre à Hugo, c'est le Markdown : le moteur de rendu de Hugo supprime le HTML brut des fichiers de contenu sauf si vous activez markup.goldmark.renderer.unsafe, et un formulaire collé devient <!-- raw HTML omitted -->. Un shortcode garde plutôt le HTML dans un template.

Mise en place

  1. Ajoutez l'id du formulaire à votre config

    hugo.toml
    baseURL = "https://example.com/"
    
    [params.ikiform]
    formId = "frm_xxxxxxxxxxxxxxxx"
    thanks = "/thanks/"

    baseURL doit être votre vraie adresse https:. Le partial s'en sert pour transformer thanks en URL absolue, et Ikiform ne suit que les redirections https:.

  2. Créez le partial

    layouts/_partials/ikiform-form.html
    {{ $id := .id | default site.Params.ikiform.formId }}
    {{ $thanks := .thanks | default site.Params.ikiform.thanks }}
    <form class="ikiform" action="https://ikiform.com/f/{{ $id }}" method="post">
      <label>Email <input name="email" type="email" autocomplete="email" required></label>
      <label>Message <textarea name="message" rows="5"></textarea></label>
      {{ with .subject }}<input type="hidden" name="_subject" value="{{ . }}">{{ end }}
      {{ with $thanks }}<input type="hidden" name="_redirect" value="{{ . | absURL }}">{{ end }}
      <input name="_gotcha" type="text" tabindex="-1" autocomplete="off" hidden>
      <button type="submit">{{ .button | default "Send" }}</button>
    </form>

    Appelez-le toujours avec un dict, même vide. Chaque clé est facultative et se rabat sur les paramètres du site.

  3. Enveloppez-le dans un shortcode

    layouts/_shortcodes/ikiform.html
    {{ partial "ikiform-form.html" (dict "id" (.Get "id") "subject" (.Get "subject") "button" (.Get "button")) }}

    Hugo 0.146 a déplacé les templates dans layouts/_partials et layouts/_shortcodes. Sur les versions plus anciennes, utilisez layouts/partials et layouts/shortcodes.

  4. Utilisez-le

    Dans n'importe quel fichier de contenu :

    content/contact.md
    ---
    title: Contact
    ---
    
    Questions about pricing? Write to us.
    
    {{< ikiform subject="Pricing question" >}}

    Ou dans un layout, pour un formulaire sur chaque page :

    layouts/_partials/footer.html
    <footer>
      {{ partial "ikiform-form.html" (dict "subject" "Footer enquiry") }}
    </footer>

Ajoutez une page content/thanks.md pour la redirection. Ikiform ne suit _redirect que si le formulaire a des domaines autorisés qui incluent votre site ; sans eux, les visiteurs voient la page de remerciement d'Ikiform. Voir Règles pour _redirect.

Domaines autorisés

Listez votre domaine de production ainsi que chaque endroit où vous prévisualisez le site généré.

Où tourne le formulaireÀ ajouter aux domaines autorisés
hugo serverlocalhost. Correspond à http://localhost:1313 : Ikiform compare uniquement le nom d'hôte, jamais le port.
Votre domaineexample.com, qui couvre aussi www.example.com
Netlifyyour-site.netlify.app. Les deploy previews (deploy-preview-12--your-site.netlify.app) et les branch deploys (branch--your-site.netlify.app) n'en sont pas des sous-domaines : ajoutez l'hôte de prévisualisation exact le temps de le tester.
Cloudflare Pagesyour-project.pages.dev. Les URL de prévisualisation comme abc123.your-project.pages.dev en sont des sous-domaines, donc elles correspondent déjà.
GitHub Pagesusername.github.io. Les sites de projet à username.github.io/repo utilisent le même hôte, donc une seule entrée les couvre tous.
  • N'ajoutez jamais netlify.app, pages.dev ou github.io seul. Tous les sites de cet hébergeur correspondraient, y compris ceux des autres.

Checklist de test

  1. Lancez hugo server, ouvrez la page et affichez le code source. Vous devez voir le <form>, pas <!-- raw HTML omitted -->.
  2. Envoyez en local avec localhost dans les domaines autorisés. Vous arriverez sur la page de remerciement d'Ikiform, car absURL donne une adresse http://localhost et seules les redirections https: sont suivies.
  3. Déployez une prévisualisation, envoyez depuis celle-ci et vérifiez que la soumission apparaît dans Ikiform sans être marquée comme spam.
  4. Envoyez sur votre domaine de production et vérifiez que vous arrivez sur /thanks/.

Dépannage

Ce que vous voyezPourquoiSolution
<!-- raw HTML omitted --> à la place du formulaireLe formulaire a été collé directement dans le MarkdownUtilisez le shortcode.
Hugo échoue avec template for shortcode "ikiform" not foundLe fichier du shortcode est dans un dossier que votre version de Hugo ne lit pasUtilisez layouts/_shortcodes à partir de 0.146, layouts/shortcodes avant.
La page de remerciement d'Ikiform au lieu de /thanks/ en productionAucun domaine autorisé, ou baseURL est en http:Ajoutez votre domaine et réglez baseURL sur votre adresse https:.
404 not_found après l'envoiparams.ikiform.formId est absent, donc l'action se termine par /f/Définissez l'id du formulaire dans hugo.toml.
Les soumissions arrivent dans le filtre spam avec origin_mismatchLa page qui a envoyé ne fait pas partie des domaines autorisés du formulaireAjoutez l'hôte du tableau ci-dessus. Avec Reject, les mêmes envois reçoivent plutôt 403 origin_not_allowed.