Kembali ke koleksi

10 undangan Jawa • Edisi PHP

Seluruh halaman, konfigurasi dan penyimpanan buku tamu menggunakan PHP. Kesepuluh konsep memiliki tata letak, font, musik dan rangkaian amplop–ilustrasi–banner berbeda. Semua memuat QS. Ar-Rum 30:21, transfer bank, ucapan publik dan RSVP privat.

Upload ke hosting

  1. Gunakan PHP 7.4 atau lebih baru pada hosting Apache/LiteSpeed yang mendukung mod_rewrite. Tidak membutuhkan Python, Composer, MySQL atau SQLite.
  2. Ekstrak ZIP dan upload isi folder ke public_html atau subfolder, misalnya public_html/undangan. Sertakan .htaccess; aktifkan tampilan hidden files pada file manager jika perlu.
  3. Pastikan folder _private/storage dapat ditulis oleh PHP (umumnya izin 755 dengan owner hosting yang benar; sesuaikan bila hosting meminta). Buka alamat hosting. URL tema berupa /keraton-prameswari atau /undangan/keraton-prameswari. Basis subfolder dideteksi otomatis.
  4. Buka satu undangan. Jika buku tamu berhasil terhubung, file data dan token admin dibuat otomatis. Jangan membagikan token.

Preview lokal

Dari folder paket jalankan:

php -S 127.0.0.1:8000 router.php

Lalu buka http://127.0.0.1:8000. File PHP harus dibuka melalui server PHP, bukan dengan double-click. URL lokal juga rapi.

URL rapi dan cache

Contoh tautan tamu: /keraton-prameswari?to=Budi%20dan%20Keluarga. Query nama tamu tetap berfungsi. Jika hosting belum mengaktifkan rewrite, alternatifnya /index.php?theme=keraton-prameswari&to=Budi. Agar tautan koleksi yang rapi berfungsi, aktifkan rewrite atau minta hosting memeriksa .htaccess.

PHP mengirim Cache-Control: no-store, no-cache, must-revalidate, max-age=0, Pragma dan Expires untuk halaman/API. .htaccess juga mengatur header aset dan mematikan ETag bila modulnya tersedia. CSS/JS/foto memakai versi hash otomatis, sehingga perubahan file menghasilkan URL aset baru. Permintaan formulir memakai cache: no-store. Jika hosting/CDN memaksa cache, nonaktifkan aturan tersebut atau lakukan purge di panel hosting. Menonaktifkan cache seluruh aset menambah penggunaan bandwidth.

Nginx tidak membaca .htaccess: administrator perlu meneruskan URL yang tidak cocok dengan file ke index.php, memblokir folder _private/views/templates, dan menyamakan header cache untuk aset. Hosting harus mengeksekusi PHP; static hosting tidak cukup.

Isi rekening bank asli

Setiap tema mempunyai konfigurasi PHP pada _private/config/NAMA-TEMA.php. Edit banks:

'banks' => [
    ['bank' => 'BCA', 'number' => '', 'holder' => 'Roni'],
    ['bank' => 'Mandiri', 'number' => '', 'holder' => 'Dita'],
],

Isi number dengan nomor rekening asli sebagai string (tetap gunakan tanda petik, terutama jika nomor diawali 0). Nama bank dan pemilik dapat diganti; jumlah bank bisa ditambah. Tombol salin aktif setelah nomor diisi. Saat kosong, kartu bank tetap terlihat dengan status belum tersedia. Tidak ada nomor rekening palsu dan tidak ada proses pembayaran otomatis.

Edit isi, foto dan galeri

Dalam konfigurasi yang sama, ganti data mempelai, orang tua, tanggal, tempat, peta, cerita, streaming, alamat kado dan WhatsApp. Semua tanggal dan tempat masih contoh. Foto yang disertakan adalah pasangan fiktif hasil AI, bukan foto asli Roni dan Dita.

Atur prewedPhoto, backgroundOpacity, heroPhotoOpacity, foto profil dan array gallery. Galeri menerima banyak foto, dimuat bertahap (default 12), dengan lazy loading, lightbox, tombol panah dan swipe. Kompres foto menjadi WebP agar cepat pada ponsel. Nama file dekoratif pada view template PHP juga dapat diganti.

Ucapan, RSVP dan admin

Siapa pun dapat mengirim ucapan dengan nama bebas, tanpa akun dan tanpa RSVP. Nama dan ucapan tampil setelah persetujuan pengirim. RSVP disimpan terpisah dan tidak tampil di buku tamu publik. Semua sepuluh contoh berbagi invitationId Roni & Dita; ganti ID untuk pasangan lain.

Buka /admin. Ambil token dari file _private/storage/admin-key.php melalui file manager hosting; salin nilai string setelah return. File ini tidak dapat dibuka lewat URL. Token juga dapat diatur melalui environment ADMIN_TOKEN (minimal 20 karakter). Halaman admin dapat mengekspor JSON dan menghapus ucapan/RSVP. Token tidak disimpan oleh halaman admin.

Data ada di _private/storage/guestbook.php, berisi JSON dengan pelindung PHP dan pembatasan akses folder. Penulisan memakai penguncian file dan penggantian atomik. Cadangkan seluruh folder storage secara privat. Paket tidak menyertakan data tamu atau token admin. Untuk banyak undangan dengan trafik tinggi, penyimpanan dapat dipindahkan ke database oleh pengembang.

Batas kiriman: nama 100 karakter, ucapan 2000 karakter, dan 120 kiriman per IP per jam; sesuaikan environment POST_LIMIT bila diperlukan. Jika layanan PHP gagal, formulir menampilkan status tidak tersedia sehingga tamu tidak diberi kesan bahwa ucapan telah tersimpan bersama.

QS. Ar-Rum 30:21

Teks Arab diperiksa terhadap Quran NU Online dan Quran.com. Bagian Indonesia berlabel “Makna ayat” merupakan parafrasa makna, bukan kutipan resmi terjemahan Kemenag. Ayat ditampilkan sebagai teks Unicode dengan arah kanan ke kiri dan font pendukung Arab lokal.

Daftar tema dan URL

TemaURLKonfigurasi
Keraton Prameswari/keraton-prameswari_private/config/keraton-prameswari.php
Lakon Asmaradana/lakon-asmaradana_private/config/lakon-asmaradana.php
Taman Melati/taman-melati_private/config/taman-melati.php
Batik Editorial/batik-editorial_private/config/batik-editorial.php
Rumah Pendopo/rumah-pendopo_private/config/rumah-pendopo.php
Orbit Rembulan/orbit-rembulan_private/config/orbit-rembulan.php
Layang Katresnan/layang-katresnan_private/config/layang-katresnan.php
Tirta Tamansari/tirta-tamansari_private/config/tirta-tamansari.php
Gunungan Selawase/gunungan-selawase_private/config/gunungan-selawase.php
Fajar Merapi/fajar-merapi_private/config/fajar-merapi.php

Musik, motion dan lisensi

Sepuluh instrumental original sintetis (48 detik, loop) berbeda motif/instrumen. Musik mulai setelah klik buka dan dapat dimatikan. Pembuka baru sekitar 6,5 detik dengan lewati dan putar ulang; reduced motion dihormati. Font lokal beserta lisensinya disertakan.

Pemeriksaan

Pemeriksaan PHP mencakup sintaks, rute semua tema, basis subfolder, header cache, versi aset, ucapan nama bebas, pagination, RSVP, admin dan proteksi file. Pemeriksaan logika animasi memakai simulasi DOM/timer; rendering visual browser belum diverifikasi.