TagsAboutContactsPortfolioNoteFM
It's my life
Recent posts 6 / 81
MQTTと電子ペーパーを使って年賀状を作るLambda – Container Image Supportを使ってAlpineからSeleniumが動くコンテナを作ってTerraformで当てる面倒なSSH Configと鍵管理はssh-config-jsonに任せようNim用のTwitterSDK作るついでに仕事中TwitterができるCLIを作ったGitHub JavaScript Action で GitHub ReleaseのUpdate Releaseを作ってみた。4連休を使ってGASとLINE BOTとFirebaseを使ってラーメン食べたいBOTを作ってみたSearchBox
Search your interesting by Algolia in this blog.くっそかんたんにFormできた
Netlifyに簡単にFormを作る機能が用意されているので利用用途ないですが、Gatsby.jsで作ったBlogにFormを作ってみようかと思います。
https://www.netlify.com/docs/form-handling/
特に必要なわけではないので技術選定とかはしませんが、一般的にForm付きのページを作る際、
の選択肢があるかと思います。
せっかくGatsby.jsで静的サイトに仕上げてるのでPHPで書くのだけはやめたいです。
そんなときにNetlify FormやGoogle Formは役立つのかもしれませんね。
せっかくのReactなのでコンポーネントにしてもよいのですが、Formなんて1ページしか使わないので 再利用性を考えずページとして作っちゃいます。
Gatsby.jsではpagesに入れたJavaScriptは固定ページとして動作しますので、ここではcontact.jsという名前でFormページを作ります。(お問い合わせページですね)
公式Docを読むとFormタグを打つ際にattributeに data-netlify=true とするだけらしいですね。こりりゃ簡単。
早速作ってみます。
import React from 'react';
import ReactGA from 'react-ga';
export default class Contact extends React.Component {
render() {
return (
<div className="container">
<div
className="row"
style={{
margin: 15,
}}
>
<Sidebar/>
<div className="col order-2">
<h1>Contact Form</h1>
<p>Please your Comment.</p>
<form
name="contact"
method="post"
action="/thanks/"
data-netlify="true"
data-netlify-honeypot="bot-field"
>
{/* The `form-name` hidden field is required to support form submissions without JavaScript */}
<input type="hidden" name="form-name" value="contact"/>
<p hidden>
<label>
Don’t fill this out:{' '}
<input name="bot-field" onChange={this.handleChange}/>
</label>
</p>
<p>
<label>
Your name:<br/>
<input type="text" name="name" class="form-control" maxLength="30" minLength="2" required placeholder="Enter your name"/>
</label>
</p>
<p>
<label>
Your email:<br/>
<input type="email" name="email" class="form-control" aria-describedby="emailHelp" pattern="^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$" required placeholder="Enter your email" />
<small id="emailHelp" className="form-text text-muted">We'll never share your email with anyone else.</small>
</label>
</p>
<p>
<label>
Message:<br/>
<textarea name="message" class="form-control" placeholder="Something writing..."/>
</label>
</p>
<p>
<label>
File:<br />
<input type="file" name="attachment" class="btn btn-info" />
</label>
</p>
<p>
<button type="submit" class="btn btn-primary">Send</button>
</p>
</form>
</div>
</div>
</div>
);
}
}
このような形でFormタグにattributeを追加するだけです。
どうやらNetlifyでビルド済みのHTMLをアップロードする際、タグを解析してからアップロードしてるらしい。
なので、ほかにもFormを使う際はname属性を変えて、別のFormということを示す必要があります。
もちろん、タグには通常のHTML同様、Bootstrapやラベル、patternを当てることもできますので、
<button type="submit" class="btn btn-primary">Send</button> <!-- btn classの設定 -->
のような形や
<label>Your email:<br/>
<!-- ラベルを使ったり・・ -->
<input type="email" name="email" class="form-control" aria-describedby="emailHelp" pattern="^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$" required placeholder="Enter your email" />
<!-- patternやrequired, placeholderも設定可能 -->
<small id="emailHelp" className="form-text text-muted">We'll never share your email with anyone else.</small>
</label>
のような形で直感的なFormを作ることもできます。
Netlify FormではいわゆるスパムBot除けとして2種類のオプションが
用意されてます。
今回はお手軽に実装したいため、1番で進めます。
data-netlify-honeypotの設定はFormのattributeに
data-netlify-honeypot=隠れフォームのname を設定します。
<form
name="contact"
method="post"
action="/thanks/"
data-netlify="true"
data-netlify-honeypot="bot-field"
>
<input type="hidden" name="form-name" value="contact"/>
<p hidden>
<label>
Don’t fill this out:{' '}
<input name="bot-field" onChange={this.handleChange}/>
</label>
</p>
そして実際に隠れフォームを設定します。
hiddenにしてるため、ふつう人間が入力することはないですが、念のため、フォームに何も入れるなというラベルを貼っておきます。
こうすることで、bot-fieldに何らかしら値が入ってた場合、Form内容がNetlifyに登録されないようになります。
内容の確認はNetlify=>Forms=>Activity Formsから簡単にできます。
また、Formが送信された時にメール or Slack or Webhookを流す機能もあります。
これでお問い合わせを見逃すことがなくなりますね!
以前、PHPで頑張ってFormを作ってましたが、最近はこんなに簡単にFormが作れるのかと感心しました。