ID formulir

Eleventy

Shortcode Eleventy yang merender formulir Ikiform di template Nunjucks, Liquid, dan Markdown, dengan ID formulir disimpan di global data.

Eleventy menghasilkan HTML statis, jadi formulir mengirim tanpa JavaScript client apa pun. Shortcode menyimpan markup di satu tempat dan bekerja sama persis di file Nunjucks, Liquid, dan Markdown.

Penyiapan

  1. Tambahkan shortcode

    eleventy.config.js
    const escape = (value) => String(value).replace(/[&<>"']/g, (char) => `&#${char.charCodeAt(0)};`);
    
    export default function (eleventyConfig) {
      eleventyConfig.addShortcode("ikiform", (formId, thanks = "", subject = "") =>
        [
          `<form class="ikiform" action="https://ikiform.com/f/${encodeURIComponent(formId)}" method="post">`,
          '<label>Email <input name="email" type="email" autocomplete="email" required></label>',
          '<label>Message <textarea name="message" rows="5"></textarea></label>',
          thanks && `<input type="hidden" name="_redirect" value="${escape(thanks)}">`,
          subject && `<input type="hidden" name="_subject" value="${escape(subject)}">`,
          '<input name="_gotcha" type="text" tabindex="-1" autocomplete="off" hidden>',
          '<button type="submit">Send</button>',
          "</form>",
        ]
          .filter(Boolean)
          .join("\n"),
      );
    }
    • Baris-barisnya sengaja digabung tanpa baris kosong. Di Markdown, baris kosong mengakhiri blok HTML, dan sisa formulir akan diperlakukan sebagai teks.
    • Ini memakai sintaks ES module. Jika package.json Anda tidak punya "type": "module", beri nama file eleventy.config.mjs.
  2. Simpan ID formulir di global data

    _data/ikiform.js
    export default {
      formId: process.env.IKIFORM_FORM_ID ?? "frm_xxxxxxxxxxxxxxxx",
      thanks: "https://example.com/thanks/",
    };

    Global data tersedia di setiap template sebagai ikiform. URL terima kasih harus absolut dan https:, karena Ikiform mengabaikan redirect lain.

  3. Gunakan

    contact.md
    ---
    title: Contact
    ---
    
    Questions about pricing? Write to us.
    
    {% ikiform ikiform.formId, ikiform.thanks, "Pricing question" %}

    File Markdown diproses dengan Liquid secara default, jadi tag-nya berfungsi di sana apa adanya. Taruh di barisnya sendiri dan jangan beri indentasi empat spasi, atau Markdown akan merendernya sebagai code block. Tag yang sama berfungsi di file .njk dan .liquid.

_redirect hanya diikuti jika formulir punya domain yang diizinkan yang mencakup situs Anda. Lihat Aturan untuk _redirect.

Domain yang diizinkan

Cantumkan domain produksi dan setiap host pratinjau. Situs Eleventy biasanya di-deploy ke Netlify atau Cloudflare Pages, yang menangani pratinjau secara berbeda.

Tempat formulir berjalanTambahkan ke Domain yang diizinkan
npx @11ty/eleventy --servelocalhost. Ini cocok dengan http://localhost:8080: Ikiform hanya membandingkan nama host, tidak pernah port.
Domain Andaexample.com, yang juga mencakup www.example.com
Netlifyyour-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 Pagesyour-project.pages.dev. URL pratinjau seperti abc123.your-project.pages.dev adalah subdomainnya, jadi sudah cocok.
  • Jangan pernah menambahkan netlify.app atau pages.dev saja. Setiap situs di host itu akan cocok, termasuk milik orang lain.

Daftar periksa pengujian

  1. Jalankan dev server dan lihat source halamannya. Formulir seharusnya berupa HTML biasa, bukan di dalam blok <pre><code>.
  2. Kirim secara lokal dengan localhost di domain yang diizinkan dan pastikan kirimannya tercantum di Ikiform.
  3. Deploy pratinjau dan kirim lagi dari host pratinjau.
  4. Kirim di produksi dan pastikan Anda mendarat di halaman terima kasih Anda.

Pemecahan masalah

Yang Anda lihatAlasanSolusi
Formulir tampil sebagai kode di halamanShortcode diberi indentasi empat spasi di file MarkdownPindahkan tag ke awal barisnya.
Separuh formulir dirender sebagai paragrafOutput shortcode berisi baris kosong, yang mengakhiri blok HTML MarkdownGabungkan baris tanpa baris kosong, seperti di config di atas.
SyntaxError: Unexpected token 'export' saat Eleventy dijalankanConfig memakai sintaks ES module di proyek CommonJSGanti nama menjadi eleventy.config.mjs, atau tambahkan "type": "module" ke package.json.
Nunjucks atau Liquid tidak bisa menemukan tag ikiformEleventy tidak memuat file configPastikan file ada di root proyek dan bernama eleventy.config.js atau .mjs.
Kiriman masuk ke filter spam dengan origin_mismatchHalaman yang mengirim tidak ada di domain yang diizinkan formulirTambahkan host dari tabel di atas. Jika Reject dipilih, kiriman yang sama mendapat 403 origin_not_allowed.