Dokumentasi teknis ketat untuk pembuatan tema. Dibuat agar AI tidak meleset dalam generate kode.
File index.php (Front Controller) telah menyiapkan variabel berikut sebelum memuat file tema. Gunakan langsung tanpa query database:
$settings (Array Associative) - Berisi data dari tabel settings. Key yang sering dipakai:
$settings['site_name'] (Nama Website)$settings['site_logo'] (URL Logo)$settings['site_icon'] (URL Favicon)$settings['color_primary'] (Kode Hex warna utama, misal: #4F46E5)$settings['color_secondary'] (Kode Hex warna sekunder)$settings['color_background'] (Kode Hex warna latar)$settings['color_text'] (Kode Hex warna teks)$settings['footer_html'] (HTML custom footer)$post (Array) - Tersedia hanya di single.php, product.php, page.php. Berisi: ['title'], ['content'], ['feature_image'], ['meta_description'], ['tags'], ['price'], ['wa_number'], ['category_id'], ['type'].$cat_posts (Array of Array) - Tersedia di category.php. Berisi daftar post di kategori tersebut.$list_posts (Array of Array) - Tersedia di archive-article.php & archive-product.php.$layout (Array of Array) - Tersedia di index.php. Berisi konfigurasi Homepage Builder.$category (Array) - Tersedia di category.php. Berisi ['name'], ['description'], ['type'].AI harus menggunakan fungsi ini untuk mengambil data dinamis:
// Mengambil menu navigasi
get_menus('header'); // return array of ['title', 'url']
get_menus('footer');
// Mengambil daftar post terbaru (untuk sidebar/loop)
get_posts('article', 5, 0); // get_posts($type, $limit, $offset)
// Generate URL sesuai pengaturan permalink admin
generate_url($post['slug'], $post['type'], $settings); // WAJIB dipakai untuk link
Warna TIDAK BOLEH di-hardcode. File header.php WAJIB menginjeksi warna dari setting ke CSS :root seperti ini:
<style>
:root {
--color-primary: <?= htmlspecialchars($settings['color_primary'] ?? '#4F46E5') ?>;
--color-secondary: <?= htmlspecialchars($settings['color_secondary'] ?? '#10B981') ?>;
--color-bg: <?= htmlspecialchars($settings['color_background'] ?? '#F3F4F6') ?>;
--color-text: <?= htmlspecialchars($settings['color_text'] ?? '#1F2937') ?>;
}
body { background: var(--color-bg); color: var(--color-text); }
.btn { background: var(--color-primary); }
</style>
File index.php tema harus melakukan loop $layout. Jika block pertama adalah full_html, maka echo dan exit (abaikan header/footer).
if (!empty($layout) && $layout[0]['type'] === 'full_html') {
echo $layout[0]['content'];
exit;
}
include 'header.php';
foreach ($layout as $block) {
if ($block['type'] == 'full_html') echo $block['content'];
elseif ($block['type'] == 'html') echo '<div>'.$block['content'].'</div>';
elseif ($block['type'] == 'hero') {
// Akses: $block['title'], $block['desc'], $block['btn_text'], $block['btn_url'], $block['bg_color']
}
elseif ($block['type'] == 'image') {
// Akses: $block['url'], $block['link']
}
elseif ($block['type'] == 'divider') {
// Akses: $block['height']
}
elseif ($block['type'] == 'articles') {
// Akses: $block['title'], $block['limit']
$articles = get_posts('article', $block['limit'] ?? 3, 0);
// Loop $articles...
}
elseif ($block['type'] == 'products') {
// Akses: $block['title'], $block['limit']
$products = get_posts('product', $block['limit'] ?? 4, 0);
// Loop $products...
}
}
include 'footer.php';
$is_full_html = (stripos(trim($post['content']), '<!DOCTYPE') === 0);
if ($is_full_html) {
echo $post['content'];
exit;
}
// Lanjut load header.php jika bukan full html
Instruksi: Edit spesifikasi desain di dalam kurung siku [...] pada textarea di bawah, lalu copy dan tempel ke AI (Gemini/ChatGPT/Claude).