Pada setiap situs web, halaman kontak (Contact Us) merupakan salah satu halaman yang dibutuhkan oleh pengunjung situs untuk menghubungi/mengomentari si pembuat web. Dari segi bisnis halaman ini wajib dibuat untuk mengakomodasi keinginan client. Dari halaman inilah transaksi bisnis dimulai.
Pada silverstripe, kita dapat membuat halaman kontak yang berisi sebuah form untuk diisi oleh pelanggan. Setiap pelanggan yang ingin menghubungi atau memberikan pesan kepada si pembuat situs dapat mengisi pesan pada form ini. Nanti pesan tersebut disimpan ke dalam basis data atau jika memungkinkan pesan tersebut nanti dapat langsung dikirim ke email pembuat situs. Halaman kontak yang akan dibuat pada tutorial ini memiliki form yang berisi field nama, email, telepon dan pesan.
Fasilitas form sebenarnya sudah disediakan oleh silverstripe, akan tetapi form tersebut isinya standar. Jika kita menginginkan fasilitas form yang lain kita harus membuat sendiri. Caranya cukup mudah dan cepat sama seperti pada saat kita membuat halaman ArticlePage di tutorial 3.
Kali ini kita akan membuat sebuah tipe halaman baru bernama ContactPage yang didalamnya akan terdapat form yang bernama ContactForm. Untuk itu kita harus membuat halaman yaitu ContactPage dan ContactForm. Selain ContactForm dan ContactPage, akan terdapat sebuah objek data yang digunakan untuk menyimpan data yang sudah di-entry yang kita beri nama objek data Contact.
ContactForm
Buat file ContactForm.php di direktori mysite/code/ContactForm.php
<?
class ContactForm extends Form {
function __construct($controller, $name) {
$fields = new FieldSet(
new TextField("nama", "Nama"),
new TextField("telepon", "Telepon"),
new EmailField("email", "E-mail"),
new TextareaField ("pesan","Pesan")
);
$actions = new FieldSet(new FormAction("sendContact", "Kirim"));
$validator = new RequiredFields("nama", "email", "pesan");
parent::__construct($controller, $name, $fields, $actions, $validator);
}
function forTemplate() {
return $this->renderWith(array(
$this->class,
'Form'
));
}
function sendContact($data, $form) {
}
}
?>
ContactForm merupakan sebuah class turunan dari Form. Dimana isinya berupa inisialisasi field-field dari form yang akan dibuat. Selain inisialisasi field pada file ContactForm juga berisi action yang dilakukan pada saat form tersebut disubmit. Action pada ContactForm bernama sendContact yang dibuat dalam bentuk method. Pada kondisi ini action masih dikosongkan. Ini dimaksudkan agar kita bisa mengkostumisasi action tersebut.
ContactForm akan memiliki view yang tersimpan pada direktori themes/themes1/templates/Includes. Untuk itu kita harus membuat file ContactForm.ss pada direktori tersebut.
themes/themes1/templates/Includes/ContactForm.ss
<% if IncludeFormTag %>
<p>Anda dapat menghubungi kami dengan mengisi form dibawah ini :</p>
<form $FormAttributes>
<% end_if %>
<% if Message %>
<p id="{$FormName}_error" class="error $MessageType">$Message</p>
<% else %>
<p id="{$FormName}_error" class="message $MessageType" style="display: none"></p>
<% end_if %>
<fieldset class="form">
<legend>$Legend</legend>
<% control Fields %>
<label><span>$title</span> $Field</label>
<% end_control %>
<div class="clear"><!-- --></div>
</fieldset>
<% if Actions %>
<div class="kirim">
<% control Actions %>
$Field
<% end_control %>
</div>
<% end_if %>
<% if IncludeFormTag %>
</form>
<% end_if %>
ContactPage
Buat file ContactPage.php pada direktori mysite/code/.
mysite/code/ContactPage.php
<?php
class ContactPage extends Page{
public function getCMSFields() {
$fields = parent::getCMSFields();
$contactEntry = new TableListField("contactEntry", "Contact", array("nama"=>"Nama", "telepon"=>"Telepon", "email"=>"Email","pesan"=>"Pesan"));
$fields->addFieldToTab("Root.Content.Kontak", $contactEntry);
return $fields;
}
}
class ContactPage_Controller extends Page_Controller {
function ContactForm(){
if(Session::get('ContactFormEntry')) {
Session::clear('ContactFormEntry');
return "Pengiriman pesan berhasil";
}
$form = new ContactForm($this, "ContactForm");
return $form;
}
function sendContact($data,$form) {
include("class.phpmailer.php");
Session::set('ContactFormEntry', true);
$Contact = new Contact;
$form->saveInto($Contact);
$Contact->write();
Director::redirectBack();
}
}
?>
ContactPage merupakan sebuah tipe halaman yang akan digunakan untuk menampilkan ContactForm. Pada controller ContactPage memiliki method untuk menampilkan ContactForm. Selain itu pada controller ContactPage juga dibuat method sendContact yang berisi perintah controller dari form. Pada method sendContact akan dilakukan penyimpanan data kedalam objek data Contact. Untuk itu nanti kita juga harus membuat objek data Contact. Lalu setelah dilakukan tahapan penyimpanan data kita dapat mengembalikan halaman ke halaman sebelumnya dengan perintah Director::redirectBack().
Pada file ContactPage.php kita melihat lagi method getCMSField yang isinya kurang lebih seperti berikut:
public function getCMSFields() {
$fields = parent::getCMSFields();
$contactEntry = new TableListField("contactEntry", "Contact", array("nama"=>"Nama", "telepon"=>"Telepon", "email"=>"Email","pesan"=>"Pesan"));
$fields->addFieldToTab("Root.Content.Kontak", $contactEntry);
return $fields;
}
Pada method ini kita menggunakan sebuah objek TableListField dimana objek ini nanti akan digunakan untuk menampilkan isi dari objek data Contact, yaitu objek data yang digunakan untuk menyimpan entry data dari ContactForm.
Setelah membuat file ContactPage.php kita harus membuat view ContactPage.ss yang isinya kurang lebih sebagai berikut:
themes/themes1/templates/ContactPage.ss
<html>
<head>
<title>Themes Silverstripe 1</title>
</head>
<body>
<ul>
<% control Menu(1) %>
<li> <a href="$Link">$MenuTitle</a></li>
<% end_control %>
</ul>
<div>
<h1>$Title</h1>
$Content
$ContactForm
</div>
</body>
</html>
Objek data Contact
Objek data Contact digunakan untuk menyimpan data entry dari action ContactForm. Objek data Contact ini yang akan mewakili database. Untuk pembuatan objek data Contact ini kita perlu membuat sebuah file Contact.php yang isinya berupa class bernama Contact turunan dari class DataObject. File tersebut disimpan di direktori mysite/code/. Kurang lebih isinya sebagai berikut:
<?php
class Contact extends DataObject{
static $db = array(
'nama' => 'Varchar',
'telepon' => 'Varchar',
'email' => 'Varchar',
'pesan' => 'Text'
);
}
?>
Pada class Contact akan terdapat sebuah variabel array bernama $db. Isi dari variabel array ini adalah field-field pada database yang akan digunakan untuk menyimpan data yang di entry pada ContactForm yang sudah kita buat sebelumnya. Nama field-nya disesuaikan dengan form yang sudah dibuat.
Tahap terakhir sebelum kita menggunakan form kontak ini yaitu melakukan flush pada database agar silverstripe membangun database dan merancang form serta page yang kita buat. Caranya dengan mengetikkan ttp://localhost/silverstripe/?flush=1 (jika silverstripe diinstall pada komputer local di direktori silverstripe) pada browser.
Selanjutnya tipe halaman ContactPage akan muncul pada combo box ketika kita akan menambahkan halaman baru di halaman admin silverstripe.

Dan juga akan muncul tab kontak pada form halaman kontak di cms untuk melihat siapa saja yang sudah mengentry data kontak kita. Tab kontak ini akan berisi tablelistfield yang sudah kita definisikan sebelumnya.

Caranya cukup mudah bukan. Silahkan dicoba sendiri, jika ada permasalahan silahkan berikan komentar.
-Nz-

