formlar

Backend olmadan çalışan formlar

Statik sitendeki bir forma tek bir öznitelik ekle, her gönderim panona düşsün. JavaScript yok, gömülü widget yok, üçüncü taraf servis yok; formu dolduran kişinin de kaydolacağı hiçbir şey yok.

Its markup, styles and deploy script are on GitHub — copy it, change the fields, redeploy.

index.html
<form harvis-form="contact">
  <input name="email" type="email" required>
  <textarea name="message"></textarea>
  <button>Send</button>
</form>
how it works

Üç adım, biri de yeniden deploy etmek

Öğrenilecek bir form oluşturucu ve kopyalanacak bir endpoint yok. Öznitelik, kurulumun tamamı.

  1. 01

    Özniteliği ekle

    HTML'indeki herhangi bir forma harvis-form yaz. Sitede birden fazla form varsa ona bir ad ver. action ve method'u boş bırak — sayfa sunulurken bunlar doldurulur.

  2. 02

    Yeniden deploy et

    Klasörü bir kez daha sürükle ya da npx harvis çalıştır. Yapılandırılacak bir şey, yapıştırılacak bir anahtar, panoda önce açılması gereken bir düğme yok.

  3. 03

    Geleni oku

    Gönderimler panoda sitenin altında, en yenisi üstte görünür. Tamamını okumak için bir satırı aç ya da hepsini CSV olarak al.

the markup

Bütün mesele iki öznitelik

harvis formu sunucudan çıkarken yeniden yazar, böylece yazdığın sayfa yazdığın sayfa olarak kalır.

senin yazdığın
<form harvis-form="contact"
      data-harvis-redirect="/thanks.html">
  <input name="email" type="email" required>
  <button>Send</button>
</form>
ziyaretçinin aldığı
<form harvis-form="contact"
      data-harvis-redirect="/thanks.html"
      action="/__harvis/form/contact" method="post">
  <input type="hidden" name="_harvis_redirect" value="/thanks.html">
  <input type="text" name="_harvis_hp" tabindex="-1" aria-hidden="true" style="…">
  <input name="email" type="email" required>
  <button>Send</button>
</form>

İki öznitelik

harvis-form
Formu toplanacak formlardan biri olarak işaretler. Değeri ona bir ad verir, böylece bir sitedeki birden fazla form birbirine karışmaz; değeri boş bırakırsan “default” altında toplanır.
data-harvis-redirect
İsteğe bağlı. Gönderdikten sonra insanların yönlendirileceği, sitendeki sayfa. Sitenin dışını gösteren her şey yok sayılır.
frameworks

Formu JavaScript kuruyorsa, endpoint'i sen yaz

harvis, sayfa sunucudan çıkarken action'ı doldurur. Ancak bundle'ın çalıştıktan sonra var olan bir form sayfada henüz yoktur, yani doldurulacak bir şey de yoktur — yeniden yazmanın yazacağı şeyi sen yazarsın. Bu hâlâ sıradan bir HTML post'udur ve bu sayfadaki her şey yine geçerlidir.

  • React
  • Vue
  • Svelte
  • Angular
ContactForm.jsx
<form action="/__harvis/form/contact" method="post">
  <input name="email" type="email" required />
  <textarea name="message" />

  {/* optional — where to land after sending */}
  <input type="hidden" name="_harvis_redirect" value="/thanks" />

  {/* optional — the decoy harvis would have added */}
  <input
    type="text"
    name="_harvis_hp"
    tabIndex={-1}
    autoComplete="off"
    aria-hidden="true"
    style={{ position: "absolute", left: "-9999px", opacity: 0 }}
  />

  <button>Send</button>
</form>
action + method
harvis'in yazacağı endpoint, artı post. Son parça formun adıdır — küçük harfler, rakamlar ve tireler; bunun dışındaki her şey “default” altında toplanır.
_harvis_redirect
İsteğe bağlı; data-harvis-redirect'in elle yazılmış hâli. Kendi sitendeki bir yol olmalı, dışarıyı gösteren her şey yok sayılır.
_harvis_hp
İsteğe bağlı ve formu kendin yazınca kaybettiğin tek şey: botları yakalayan yem alan. display:none yerine ekran dışında tut ve boş bırak — onu dolduran her gönderi elenir.
harvis-form
Hiç koyma. Bu öznitelik, harvis'ten action'ı yazmasını istemektir; sen de onu az önce kendin yazdın.

Göndermeyi tarayıcıya bırak

preventDefault yok, fetch yok. Yanıt, tarayıcının kendiliğinden izlediği bir yönlendirmedir; formu betikler çalışmadığında da ayakta tutan şey budur.

Ön render de JavaScript sayılır

Build'in formu HTML'e yazıyor ve uygulaman sonra tarayıcıda devralıyorsa, alanları yine de yaz — harvis'in eklediği alanlar senin bileşeninde yok, dolayısıyla hydration onları atabilir.

included

Neler elde ediyorsun

Aşağıdakilerin hepsi varsayılan olarak açık. Hiçbirinin ayarlar sayfası yok.

  • JavaScript yok

    Form, HTML'in en başından beri gönderdiği gibi gönderir. Betikler engelliyken, yavaş bir telefonda ve yalnızca metin gösteren bir tarayıcıda da çalışır.

  • Spam süzülür

    Her form, hiçbir insanın göremediği bir yem alanla birlikte sunulur; onu dolduran her şey haber verilmeden çöpe atılır. Hız sınırları, bir ziyaretçinin ve bir sitenin bir saatte ne kadar gönderebileceğini sınırlar.

  • İstediğin kadar form

    Onlara ad ver — aynı sitedeki iletişim formu ile kayıt formu ayrı listeler tutar, ayrı ayrı filtreleyip dışa aktarabilirsin.

  • Kendi teşekkür sayfan

    Formu kendi yazdığın bir sayfaya yönlendir, insanlar gönderdikten sonra oraya düşsün. Belirtmezsen sade bir onay sayfası görürler.

  • İstediğin zaman dışa aktar

    Tek bir düğme, bugüne dek gönderilmiş her alan için bir sütunu olan bir CSV verir; yani yolun ortasında bir soru eklenmiş bir form bile tek bir tablo olarak açılır.

  • Kimsenin peşine düşen bir şey yok

    İzleme betiği yok, çerez yok, sayfada üçüncü taraf yok. Ziyaretçinin adresi saklanmadan önce hash'lenir; o da yalnızca hız sınırı iki gönderimi birbirinden ayırabilsin diye.

limits

Sınırlar

Bir iletişim formu için cömert, sitene doğrultulmuş bir betiğin gelen kutunu doldurmasına izin vermeyecek kadar da dar.

Gönderim başına alan
30
Bir alanın uzunluğu
5.000 karakter
Bir gönderimin boyutu
64 KB
Site başına gönderim
saatte 60
Ziyaretçi başına gönderim
saatte 20
Site başına saklanan
1.000, en yenisi üstte
faq

Sorular

Statik bir siteye form koymadan önce insanların sorduğu şeyler.

Statik form nedir?

Kendi sunucusu olmayan bir sitedeki form. Normalde bu, formun bir şeyi gönderecek yeri olmaması demektir; statik siteler de bu yüzden genellikle üçüncü taraf bir form servisi ödünç alır. harvis sitenin zaten her sayfasını sunuyor, dolayısıyla gönderimi geçerken alabilir.

Kod yazmayı bilmem gerekir mi?

Bir satır HTML'e tek bir kelime ekleyebilmen yeterli. Siteni bir yapay zekâ yazdıysa, forma harvis-form özniteliğini eklemesini iste — nasıl yapılacağını biliyor, çünkü harvis'in yapay zekâ asistanları için yayımladığı yönergelerde bu yazıyor.

JavaScript kapalıyken çalışır mı?

Çalışır. Zaten böyle kurgulanmasının sebebi bu. Form sıradan bir HTML post'u yapar, tarayıcı da ardından bir yönlendirmeyi izler; tıpkı JavaScript var olmadan önce formların çalıştığı gibi.

Kendi endpoint'imi ya da başka bir form servisini kullanmayı sürdürebilir miyim?

Evet — özniteliği eklemesen yeter. harvis-form içermeyen formlar, action'ı dahil, tam yazdığın gibi sunulur. Özniteliği taşıyan bir formda ise harvis action'ı değiştirir, çünkü özniteliği eklemek gönderimin nereye gitmesi gerektiğini söyleme biçimindir.

React, Vue veya Svelte ile çalışıyor mu?

Evet, bir adım fazlasıyla. Form, build'inin ürettiği HTML'in içindeyse öznitelik yeter. Yalnızca JavaScript çalıştıktan sonra beliriyorsa, bunun yerine bileşene action="/__harvis/form/contact" ve method="post" yaz — aynı endpoint, aynı pano, gönderme işini yine tarayıcı yapar.

İnsanlar dosya ekleyebilir mi?

Henüz değil. Toplanan bir formdaki dosya alanı ziyaretçi için hâlâ çalışır, ama dosya saklanmaz — yalnızca metin alanları tutulur.

Siteyi silersem gönderimlere ne olur?

Onlar da gider. Gönderimler bir deploy'a değil siteye aittir; yani yeniden deploy etmek onları korur, siteyi silmek ise kalıcı olarak kaldırır. Saklamak istiyorsan önce bir CSV dışa aktar.

Bir siteyi yayına al ve dene

Yayınlamak ücretsiz ve yaklaşık iki saniye sürüyor. Bir forma özniteliği ekle, yeniden deploy et ve kendine bir test mesajı gönder.

Bir siteyi yayına al