Hugo
Partial dan shortcode Hugo yang merender formulir Ikiform dari site params, di layout dan di konten Markdown.
Hugo menghasilkan HTML biasa, dan kiriman formulir biasa sudah cukup untuk Ikiform, jadi tidak ada JavaScript yang perlu ditambahkan. Satu-satunya jebakan khas Hugo adalah Markdown: renderer Hugo membuang HTML mentah dari file konten kecuali Anda mengaktifkan markup.goldmark.renderer.unsafe, dan formulir yang ditempel berubah menjadi <!-- raw HTML omitted -->. Shortcode menyimpan HTML di template sebagai gantinya.
Penyiapan
Tambahkan ID formulir ke config
hugo.toml baseURL = "https://example.com/" [params.ikiform] formId = "frm_xxxxxxxxxxxxxxxx" thanks = "/thanks/"baseURLharus berupa alamathttps:Anda yang sebenarnya. Partial memakainya untuk mengubahthanksmenjadi URL absolut, dan Ikiform hanya mengikuti redirecthttps:.Buat 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>Selalu panggil dengan
dict, meskipun kosong. Setiap key bersifat opsional dan kembali ke site params jika tidak diisi.Bungkus dalam shortcode
layouts/_shortcodes/ikiform.html {{ partial "ikiform-form.html" (dict "id" (.Get "id") "subject" (.Get "subject") "button" (.Get "button")) }}Hugo 0.146 memindahkan template ke
layouts/_partialsdanlayouts/_shortcodes. Di versi lebih lama, gunakanlayouts/partialsdanlayouts/shortcodes.Gunakan
Di file konten mana pun:
content/contact.md --- title: Contact --- Questions about pricing? Write to us. {{< ikiform subject="Pricing question" >}}Atau di layout, untuk formulir di setiap halaman:
layouts/_partials/footer.html <footer> {{ partial "ikiform-form.html" (dict "subject" "Footer enquiry") }} </footer>
Tambahkan halaman content/thanks.md untuk redirect. Ikiform mengikuti _redirect hanya jika formulir punya domain yang diizinkan yang mencakup situs Anda; tanpanya, pengunjung melihat halaman terima kasih Ikiform. Lihat Aturan untuk _redirect.
Domain yang diizinkan
Cantumkan domain produksi Anda plus setiap tempat Anda melihat pratinjau situs hasil build.
| Tempat formulir berjalan | Tambahkan ke Domain yang diizinkan |
|---|---|
hugo server | localhost. Ini cocok dengan http://localhost:1313: Ikiform hanya membandingkan nama host, tidak pernah port. |
| Domain Anda | example.com, yang juga mencakup www.example.com |
| Netlify | your-site.netlify.app. Deploy preview (deploy-preview-12--your-site.netlify.app) dan branch deploy (branch--your-site.netlify.app) bukan subdomainnya, jadi tambahkan host pratinjau persisnya selama Anda menguji. |
| Cloudflare Pages | your-project.pages.dev. URL pratinjau seperti abc123.your-project.pages.dev adalah subdomainnya, jadi sudah cocok. |
| GitHub Pages | username.github.io. Situs proyek di username.github.io/repo memakai host yang sama, jadi satu entri mencakup semuanya. |
- Jangan pernah menambahkan
netlify.app,pages.dev, ataugithub.iosaja. Setiap situs di host itu akan cocok, termasuk milik orang lain.
Daftar periksa pengujian
- Jalankan
hugo server, buka halamannya, dan lihat source-nya. Anda seharusnya melihat<form>, bukan<!-- raw HTML omitted -->. - Kirim secara lokal dengan
localhostdi domain yang diizinkan. Anda akan mendarat di halaman terima kasih Ikiform, karenaabsURLmenghasilkan alamathttp://localhostdan hanya redirecthttps:yang diikuti. - Deploy pratinjau, kirim dari sana, dan pastikan kirimannya tercantum di Ikiform dan tidak ditandai spam.
- Kirim di domain produksi Anda dan pastikan Anda mendarat di
/thanks/.
Pemecahan masalah
| Yang Anda lihat | Alasan | Solusi |
|---|---|---|
<!-- raw HTML omitted --> di tempat formulir seharusnya berada | Formulir ditempel langsung ke Markdown | Gunakan shortcode. |
Hugo gagal dengan template for shortcode "ikiform" not found | File shortcode ada di folder yang tidak dibaca oleh versi Hugo Anda | Gunakan layouts/_shortcodes di 0.146 ke atas, layouts/shortcodes sebelumnya. |
Halaman terima kasih Ikiform, bukan /thanks/, di produksi | Tidak ada domain yang diizinkan, atau baseURL memakai http: | Tambahkan domain Anda dan atur baseURL ke alamat https: Anda. |
404 not_found setelah dikirim | params.ikiform.formId tidak ada, jadi action berakhir di /f/ | Atur ID formulir di hugo.toml. |
Kiriman masuk ke filter spam dengan origin_mismatch | Halaman yang mengirim tidak ada di domain yang diizinkan formulir | Tambahkan host dari tabel di atas. Jika Reject dipilih, kiriman yang sama mendapat 403 origin_not_allowed. |