Widget Lengkap
Form pencarian lengkap untuk implementasi cepat
Kode untuk memasang widget:
<!-- Tambahkan widget ke halaman -->
<div id="booking-widget-container"></div>
<!-- Tambahkan script booking widget -->
<script src="https://widget.emerald-system.id/widget/kalenderwidget.js"></script>
<script>
// Inisialisasi widget
document.addEventListener('DOMContentLoaded', function() {
EmeraldBookingWidget.init({
container: document.getElementById('booking-widget-container'),
widgetBaseUrl: 'https://booking.emerald-system.id', // URL dasar untuk booking engine
primaryColor: '#8B0000',
mode: 'full',
propertyCode: 'DEMO', // Kode properti untuk API request dan URL booking
database: 'DEMO', // Kode database untuk header X-Database
redirectSameTab: true // buka di tab yang sama
});
});
</script>Widget Kalender
Widget kalender untuk implementasi kustom di website Anda
Kode untuk memasang widget kalender:
<!-- Tambahkan widget ke halaman -->
<div id="calendar-widget-container"></div>
<!-- Tambahkan script booking widget -->
<script src="https://widget.emerald-system.id/widget/kalenderwidget.js"></script>
<script>
// Inisialisasi widget kalender
document.addEventListener('DOMContentLoaded', function() {
EmeraldBookingWidget.init({
container: document.getElementById('calendar-widget-container'),
widgetBaseUrl: 'https://booking.emerald-system.id', // URL dasar untuk booking engine
primaryColor: '#006400',
mode: 'calendar',
propertyCode: 'DEMO', // Kode properti untuk API request
database: 'DEMO', // Kode database untuk header X-Database
onSelect: function(data) {
console.log('Selected dates:', data);
// Handle selected dates as needed
}
});
});
</script>API Integration
Integrasi sistem pemesanan dengan aplikasi Anda
Contoh API Request
// Example API Request
const response = await fetch('https://api.emerald-system.com/v1/bookings', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
room_type: 'deluxe',
check_in: '2024-03-01',
check_out: '2024-03-03'
})
});Endpoint Utama
/v1/bookings- Membuat pemesanan baru/v1/availability- Cek ketersediaan kamar/v1/rates- Mendapatkan daftar harga/v1/bookings/{id}- Detail pemesanan
Autentikasi
Semua request ke API memerlukan header Authorization dengan token Bearer.
Dapatkan API key Anda dengan menghubungi tim support Emerald.
Contoh Implementasi Dasar
Cara cepat memasang widget di website Anda
Quick Start - Pasang Widget dalam 2 Langkah
Langkah 1: Tambahkan Container
<!-- Tambahkan widget ke halaman --> <div id="booking-widget-container"></div>
Langkah 2: Tambahkan Script & Inisialisasi
<!-- Tambahkan script booking widget -->
<script src="https://widget.emerald-system.id/widget/kalenderwidget.js"></script>
<script>
// Inisialisasi widget
document.addEventListener('DOMContentLoaded', function() {
EmeraldBookingWidget.init({
container: document.getElementById('booking-widget-container'),
widgetBaseUrl: 'https://booking.emerald-system.id', // URL dasar untuk booking engine
primaryColor: '#8B0000',
mode: 'full',
propertyCode: 'DEMO', // Kode properti untuk API request dan URL booking
database: 'DEMO', // Kode database untuk header X-Database
redirectSameTab: true // buka di tab yang sama
});
});
</script>Opsi Konfigurasi
Parameter yang tersedia untuk menyesuaikan widget
| Opsi | Tipe | Default | Deskripsi |
|---|---|---|---|
| container | Element | null | Element DOM tempat widget akan ditampilkan (wajib) |
| primaryColor | String | #8B0000 | Warna utama widget (format hex) |
| widgetBaseUrl | String | https://booking.emerald-system.id | URL dasar booking engine yang dapat dikonfigurasi sesuai kebutuhan |
| redirectUrl | String | null | URL kustom untuk redirect hasil pencarian (menggantikan widgetBaseUrl jika diisi) |
| language | String | id | Bahasa (id atau en) |
| mode | String | calendar | Mode widget (calendar, search, atau full) |
| propertyCode | String | DEMO | Kode properti hotel |
| onSelect | Function | null | Callback saat tanggal dipilih |
| debug | Boolean | false | Mode debug untuk logging |
Panduan Integrasi
Langkah-langkah implementasi widget ke website Anda
Langkah Instalasi
- Salin script widget ke direktori website Anda
- Tambahkan container HTML di halaman Anda
- Muat script widget dari server Anda
- Inisialisasi widget dengan opsi yang diperlukan
- Sesuaikan tampilan sesuai kebutuhan menggunakan CSS kustom
Tips Penggunaan
- Gunakan mode
fulluntuk pengalaman pemesanan lengkap - Untuk kontrol lebih, gunakan mode
calendardan implementasikan logika pemesanan kustom - Sesuaikan warna utama agar sesuai dengan branding website Anda
- Aktifkan mode debug saat pengembangan untuk melihat log detail
WordPress Integration
Panduan integrasi dengan WordPress step-by-step
Emerald Booking Widget tersedia sebagai plugin WordPress yang mudah digunakan
1Unduh Plugin
Unduh plugin Emerald Booking Widget dari link download di bawah ini.
2Install Plugin
Login ke dashboard WordPress admin Anda, kemudian navigasi ke Plugins > Add New > Upload Plugin.

3Upload Plugin
Pilih file zip yang baru saja diunduh dan klik 'Install Now'.

4Aktifkan Plugin
Setelah instalasi selesai, klik 'Activate Plugin' untuk mengaktifkan widget.

5Penggunaan Shortcode
Anda dapat menyisipkan widget ke halaman atau post apa pun menggunakan shortcode.
[emerald_booking_widget property_code="DEMO" primary_color="#8B0000" mode="full"]
6Konfigurasi Shortcode
Berikut adalah parameter yang dapat disesuaikan:
| Parameter | Deskripsi | Default |
|---|---|---|
| property_code | Kode properti hotel | DEMO |
| primary_color | Warna utama widget (format hex) | #8B0000 |
| language | Bahasa widget (id atau en) | id |
| mode | Mode tampilan (full, search, calendar) | full |
| widget_base_url | URL basis widget | https://booking.emerald-system.id |
| redirect_url | URL kustom untuk redirect hasil pencarian | |
| api_base_url | URL basis API | |
| open_in_new_tab | Buka hasil di tab baru (true/false) | false |
| debug | Mode debug (true/false) | false |
7Penggunaan Widget
Anda juga dapat menambahkan widget melalui sistem widget WordPress.

- Buka menu Appearance > Widgets di dashboard WordPress
- Temukan widget 'Emerald Booking Widget' di daftar widget yang tersedia
- Drag and drop widget ke area widget yang diinginkan (sidebar, footer, dll)
- Konfigurasikan widget sesuai kebutuhan Anda
- Klik Save untuk menyimpan pengaturan
8Konfigurasikan Tema
Anda dapat menyesuaikan tampilan widget menggunakan CSS kustom di Customizer WordPress Anda.
.emerald-booking-widget {
/* Kustomisasi sesuai kebutuhan */
max-width: 100%;
border-radius: 16px;
overflow: hidden;
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1);
}Shortcode WordPress
Salin dan tempel shortcode berikut ke dalam post atau halaman WordPress Anda:
[emerald_booking_widget property_code="DEMO" database="DEMO" primary_color="#8B0000" mode="full" widget_base_url="https://booking.emerald-system.id" redirect_same_tab="true" ]
Next.js Integration
Cara mengintegrasikan widget dengan aplikasi Next.js
Widget dapat diintegrasikan dengan mudah ke dalam aplikasi Next.js
Komponen BookingWidget.js
import { useEffect, useRef } from 'react';
export default function BookingWidget({
widgetBaseUrl = 'https://booking.emerald-system.id',
propertyCode = 'DEMO',
database = 'DEMO',
primaryColor = '#8B0000',
mode = 'full',
openInNewTab = false
}) {
const containerRef = useRef(null);
const scriptRef = useRef(null);
useEffect(() => {
// Cek apakah script sudah dimuat
if (!scriptRef.current) {
// Buat script element
const script = document.createElement('script');
script.src = '/widget/kalenderwidget.js';
script.async = true;
script.onload = initializeWidget;
// Simpan referensi ke script
scriptRef.current = script;
// Tambahkan script ke document
document.body.appendChild(script);
} else {
// Jika script sudah dimuat, langsung inisialisasi widget
initializeWidget();
}
// Cleanup function
return () => {
if (window.EmeraldBookingWidget && containerRef.current) {
containerRef.current.innerHTML = '';
}
};
}, [widgetBaseUrl, propertyCode, database, primaryColor, mode, openInNewTab]);
const initializeWidget = () => {
if (containerRef.current && window.EmeraldBookingWidget) {
containerRef.current.innerHTML = '';
window.EmeraldBookingWidget.init({
container: containerRef.current,
widgetBaseUrl: widgetBaseUrl,
propertyCode: propertyCode,
database: database,
primaryColor: primaryColor,
mode: mode,
openInNewTab: openInNewTab
});
}
};
return <div ref={containerRef} className="booking-widget-container" />;
}Penggunaan Komponen (Next.js App Router)
'use client';
import BookingWidget from '@/components/BookingWidget';
export default function BookingPage() {
return (
<main className="container mx-auto px-4 py-8">
<h1 className="text-3xl font-bold mb-6">Booking Hotel</h1>
<div className="mb-8">
<BookingWidget
widgetBaseUrl="https://booking.emerald-system.id"
propertyCode="DEMO"
database="DEMO"
primaryColor="#8B0000"
mode="full"
/>
</div>
</main>
);
}Flutter Web Integration
Cara mengintegrasikan widget dengan aplikasi Flutter Web
Integrasi dengan Flutter Web memerlukan penggunaan platform channel untuk JavaScript interop
booking_widget.dart
// CONTOH KODE DART - HANYA UNTUK REFERENSI
// PERHATIAN: Ini adalah kode Dart untuk Flutter Web, bukan JavaScript
import 'dart:html' as html;
import 'dart:ui' as ui;
import 'package:flutter/material.dart';
class BookingWidget extends StatefulWidget {
final String widgetBaseUrl;
final String propertyCode;
final String database;
final String primaryColor;
final String mode;
final bool openInNewTab;
final double height;
const BookingWidget({
Key? key,
this.widgetBaseUrl = 'https://booking.emerald-system.id',
this.propertyCode = 'DEMO',
this.database = 'DEMO',
this.primaryColor = '#8B0000',
this.mode = 'full',
this.openInNewTab = false,
this.height = 500,
}) : super(key: key);
@override
State<BookingWidget> createState() => _BookingWidgetState();
}
class _BookingWidgetState extends State<BookingWidget> {
final String viewId = 'booking-widget-view-' + DateTime.now().millisecondsSinceEpoch.toString();
bool _isScriptLoaded = false;
@override
void initState() {
super.initState();
// Initialize UI views after the first frame is rendered
WidgetsBinding.instance.addPostFrameCallback((_) {
_loadBookingWidget();
});
}
void _loadBookingWidget() {
// Register the view factory
ui.platformViewRegistry.registerViewFactory(viewId, (int viewId) {
final container = html.DivElement()
..id = 'booking-widget-container'
..style.width = '100%'
..style.height = '100%';
_loadScript(container);
return container;
});
}
void _loadScript(html.Element container) {
// Check if script is already loaded
if (!_isScriptLoaded) {
final script = html.ScriptElement()
..src = '/widget/kalenderwidget.js'
..type = 'text/javascript';
script.onLoad.listen((event) {
_isScriptLoaded = true;
_initializeWidget(container);
});
html.document.head!.append(script);
} else {
_initializeWidget(container);
}
}
void _initializeWidget(html.Element container) {
// Call the JavaScript function using dart:html JS interop
html.window.callMethod('eval', ['''
if (window.EmeraldBookingWidget) {
window.EmeraldBookingWidget.init({
container: document.getElementById('booking-widget-container'),
widgetBaseUrl: '${widget.widgetBaseUrl}',
propertyCode: '${widget.propertyCode}',
database: '${widget.database}',
primaryColor: '${widget.primaryColor}',
mode: '${widget.mode}',
openInNewTab: ${widget.openInNewTab}
});
}
''']);
}
@override
Widget build(BuildContext context) {
return SizedBox(
height: widget.height,
child: HtmlElementView(viewType: viewId),
);
}
}Penggunaan Widget dalam Flutter
// CONTOH KODE DART - HANYA UNTUK REFERENSI
// PERHATIAN: Ini adalah kode Dart untuk Flutter Web, bukan JavaScript
import 'package:flutter/material.dart';
import 'booking_widget.dart';
class BookingPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Hotel Booking'),
),
body: SingleChildScrollView(
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'Cari dan Pesan Kamar Hotel',
style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold),
),
SizedBox(height: 20),
BookingWidget(
widgetBaseUrl: 'https://pakumas.emerald-system.id',
propertyCode: 'DEMO',
database: 'DEMO',
primaryColor: '#8B0000',
mode: 'full',
height: 600,
),
],
),
),
),
);
}
}