Jekyll
_config.yml から Ikiform のフォームを描画する Jekyll のインクルード。GitHub Pages でも独自ドメインでもリダイレクトが動きます。
Jekyll のサイトは静的なので、プレーンなフォームの送信に向いています。フォームをインクルードにしておけば、すべてのページで同じマークアップを使え、フォーム ID も 1 か所で管理できます。
セットアップ
_config.yml に設定を追加する
_config.yml url: "https://example.com" ikiform: form_id: frm_xxxxxxxxxxxxxxxx thanks: /thanks/インクルードは
absolute_urlでリダイレクトを組み立てるので、urlが必要です。これがないとリダイレクトはパスだけになり、Ikiform は完全なhttps:の URL 以外を無視します。GitHub Pages のプロジェクトサイトではbaseurl: /repoも設定してください。absolute_urlが自動で付け加えます。インクルードを作成する
_includes/ikiform-form.html {%- assign form_id = include.form_id | default: site.ikiform.form_id -%} {%- assign thanks = include.thanks | default: site.ikiform.thanks -%} <form class="ikiform" action="https://ikiform.com/f/{{ form_id }}" method="post"> <label>Email <input name="email" type="email" autocomplete="email" required></label> <label>Message <textarea name="message" rows="5"></textarea></label> {%- if include.subject %} <input type="hidden" name="_subject" value="{{ include.subject | escape }}"> {%- endif %} {%- if thanks %} <input type="hidden" name="_redirect" value="{{ thanks | absolute_url }}"> {%- endif %} <input name="_gotcha" type="text" tabindex="-1" autocomplete="off" hidden> <button type="submit">{{ include.button | default: "Send" }}</button> </form>使う
contact.md --- layout: page title: Contact --- Questions about pricing? Write to us. {% include ikiform-form.html subject="Pricing question" %}インクルードは固定ページ、投稿、レイアウトで使えます。別のフォームを使うには
form_id、別のリダイレクト先にはthanks、ボタンのテキストにはbuttonを渡します。サンクスページを追加する
thanks.md --- layout: page title: Thanks permalink: /thanks/ --- Thanks, we got your message.
_redirect に従うのは、フォームの許可ドメインに自分のサイトが含まれている場合だけです。_redirect のルールを参照してください。
許可ドメイン
Jekyll のホスティング先としては GitHub Pages が一般的なので、github.io のホストと独自ドメインの 2 つを登録することがよくあります。
| フォームが動く場所 | 許可ドメインに追加するもの |
|---|---|
bundle exec jekyll serve | localhost。http://localhost:4000 に一致します。Ikiform が比較するのはホスト名だけで、ポートは比較しません。 |
| GitHub Pages | username.github.io。username.github.io/repo のプロジェクトサイトも同じホストを使うので、1 つの登録ですべてカバーできます。 |
| GitHub Pages の独自ドメイン | example.com(www.example.com も含まれます) |
| Netlify | your-site.netlify.app。デプロイプレビュー(deploy-preview-12--your-site.netlify.app)やブランチデプロイ(branch--your-site.netlify.app)はそのサブドメインではないので、テストする間はプレビューの正確なホストを追加してください。 |
github.ioだけを追加しないでください。他の人のサイトも含め、そのホスト上のすべてのサイトが一致してしまいます。
テストのチェックリスト
bundle exec jekyll serveを実行し、ページのソースを表示します。actionがフォーム ID で終わっているはずです。- ローカルで送信します。
jekyll serveはurlをhttp://localhost:4000に設定し、http:のリダイレクトには従わないため、Ikiform のサンクスページに移動します。 - プッシュして Pages のビルドを待ち、
username.github.ioから送信します。送信データがスパムになっていないことを確認します。 - 独自ドメインで送信し、
/thanks/に移動することを確認します。
トラブルシューティング
| 症状 | 原因 | 対処 |
|---|---|---|
Could not locate the included file 'ikiform-form.html' | ファイルが _includes にない、または名前が違う | _includes/ikiform-form.html に移動します。 |
本番のサイトで /thanks/ ではなく Ikiform のサンクスページが表示される | _config.yml に url がない、またはフォームに許可ドメインがない | url を https: のアドレスにして、ドメインを追加します。 |
送信後に 404 not_found が表示される | site.ikiform.form_id が空なので、action が /f/ で終わっている | _config.yml の ikiform: の下のインデントを確認します。 |
送信データが origin_mismatch でスパムフィルターの下に届く | 送信したページが、フォームの許可ドメインに含まれていない | 上の表のホストを追加します。Reject を選んでいる場合、同じ送信には代わりに 403 origin_not_allowed が返ります。 |