SSI — Server-Side Includes
Menyertakan fragmen HTML (atau berkas lain) ke dalam template dengan komentar gaya SSI. Diproses di NexaDom lebih dulu dari variabel/blok lain — cocok untuk header, footer, dan komponen yang dipakai ulang.
NexaDom.php · process_ssi_includes
Pengenalan
Server-Side Includes (SSI) di Nexa Dom memungkinkan Anda menarik isi dari berkas lain ke dalam template lewat satu baris komentar. Pola ini membuat layout modular: potongan UI (header, sidebar, footer) disimpan terpisah dan disatukan saat render.
Implementasi ada di App\System\Dom\NexaDom::process_ssi_includes() — direktif diproses di awal pipeline template (bersama alur render lainnya), lalu isi yang disertakan juga menjalani pemrosesan SSI bertingkat dan parsing template (variabel NexaDom, dll.).
Sintaks
Gunakan komentar HTML dengan bentuk berikut. Path diapit tanda kutip ganda atau tunggal.
<!--#include="nama/relatif/ke/root/template.html" -->
<!--#include='components/sidebar.html' -->Path bersifat relatif terhadap root template NexaDom ($this->root + path yang Anda tulis), misalnya di bawah templates/theme/ untuk tampilan theme — sesuaikan dengan struktur proyek Anda.
Struktur direktori (contoh)
templates/theme/
├── header.html
├── footer.html
├── components/
│ ├── sidebar.html
│ └── menu.html
└── docs/
└── halaman.htmlContoh pemakaian
1. Include dasar
<!DOCTYPE html>
<html>
<body>
<!--#include="components/header.html" -->
<main> … konten … </main>
<!--#include="footer.html" -->
</body>
</html>2. Include bersarang
Berkas yang di-include boleh berisi direktif SSI lain; NexaDom memprosesnya secara rekursif (dengan batas iterasi agar tidak loop tak hingga).
<aside class="sidebar">
<!--#include="components/menu.html" -->
</aside>3. Bersama blok kondisi NexaDom
Setelah SSI digabungkan, isi tetap bisa memakai sintaks template (misalnya blok {if …} / variabel) sesuai dukungan NexaDom di proyek Anda.
<!-- contoh: bedakan panel lewat variabel dari controller -->
{if user_is_admin}
<!--#include="components/admin-panel.html" -->
{else}
<!--#include="components/user-panel.html" -->
{/if}Pastikan nama blok/variabel selaras dengan parser NexaDom yang Anda pakai.
Perilaku teknis (ringkas)
| Topik | Keterangan |
|---|---|
| Urutan proses | SSI diproses lebih dulu; berkas tidak ditemukan menghasilkan komentar error di HTML (dan log). |
| Ekstensi berkas | Alur berbeda untuk berkas .php (di-include sebagai PHP) vs konten HTML biasa — lihat implementasi di NexaDom.php. |
| Bersarang | Include di dalam include didukung; hindari sirkular (A memuat B memuat A). |
| Keamanan | Path sebaiknya hanya merujuk berkas template yang Anda kendalikan; jangan membangun path dari input pengguna tanpa validasi. |
{variabel} seperti halaman utama.
Praktik yang disarankan
- Kelompokkan komponen di folder seperti
components/dengan nama berkas yang jelas. - Hindari rantai include terlalu dalam agar mudah di-debug.
- Pastikan berkas target ada sebelum deploy; periksa log jika muncul komentar
SSI Include: File tidak ditemukan.
Troubleshooting
- Periksa path relatif terhadap root template, bukan terhadap berkas pemanggil.
- Izinkan berkas dibaca server (permission).
- Waspadai loop include — NexaDom membatasi jumlah iterasi; jika tercapai, kemungkinan ada rekursi tak sengaja.
Lanjut
Sebelumnya: Filter. Berikutnya: If / elseif / else. Indeks Helper · Dokumentasi · Beranda.