İletişim formları site yöneticileri ile ziyaretçileri arasındaki bağlantıyı sağlayan internet sitelerinin en önemli bölümlerinden biridir. Bu yazımızda CodeIgniter çatısını kullanarak iletişim formu oluşturacağız.
Uygulamada CodeIgniter içerisinde gelen Email ve Form_validation kütühaneleri ile form yardımcısından(helper) faydalanacağız.
application/controller dizinine uygulamamızın controller dosyası olacak olan iletisim.php’yi oluşturarak aşağıdaki kodları yazalım.
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
class Iletisim extends Controller {
function __construct() {
parent::__construct();
/*
* Controller ve view dosyalarında kullanacağımız form yardımcısını(helper) ve Form_validation kütüphanesini(library) yüklüyoruz.
*/
$this->load->helper('form');
$this->load->library('form_validation');
}
function index() {
/*
* Formdan veri gelip gelmediğini Form_validation kütüphanesinin yardımı ile kontrol edeceğiz.
* Bunun için gerekli doğrulama kurallarını tanımlıyoruz.
* Form_validation kütüphanesi hakkında daha fazla bilgi için : http://codeigniter.com/user_guide/libraries/form_validation.html
*/
$this->form_validation->set_rules('email', 'E-Posta', 'trim|required|valid_email');
$this->form_validation->set_rules('name', 'İsim', 'trim|required');
$this->form_validation->set_rules('message', 'Mesaj', 'trim|required');
$data['errors'] = array();
/*
* Formdan veri gelmişmi kontrol ediyoruz.
*/
if ($this->form_validation->run()) {
$edata = array(
'name' => $this->form_validation->set_value('name'),
'email' => $this->form_validation->set_value('email'),
'message' => $this->form_validation->set_value('message')
);
/*
* Formdan gelen verileri edata isimli bir dizide toplayarak _send_email fonksiyonunu çağırıyoruz.
* Aşağıda göreceğimiz bu fonksiyon e-posta başarıyla gönderilirse TRUE, gönderilemezse FALSE döndürüyor.
* Bizde dönen değere göre kullanıcının göreceği mesajı ekrana yazdırıyoruz.
*/
if($this->_send_email($edata)) {
echo '<div class="success">Mesajınız başarıyla gönderildi. Görüş ve önerileriniz için teşekkürler.</div>';
return;
} else {
echo '<div class="error">Teknik bir hatadan dolayı mesajınız <b>gönderilemedi</b>.</div>';
return;
}
}
/*
* Formdan herhangi bir veri gelmemişse veya gelen veriler eksik/hatalıysa view dosyamızı yüklüyoruz.
*/
$this->load->view('iletisim', $data);
}
function _send_email($data) {
/*
* CodeIgniter Email kütüphanesini yüklüyoruz.
* Bu kütüphane hakkında daha fazla bilgi için : http://codeigniter.com/user_guide/libraries/email.html
*/
$this->load->library('email');
/*
* E-posta hangi protokolle gönderilecek? mail smtp veya sendmail
*/
$config['protocol'] = 'mail';
/*
* Gönderilecek E-posta tipi. text veya html
* Mesajın biraz daha hoş gözükmesi için html olarak göndereceğiz.
*/
$config['mailtype'] = 'html';
/*
* Eğer protocol'ü smtp olarak belirlediyseniz alttaki gerekli ayarları yapmalısınız.
* $config['smtp_host'] = 'smtp_sunucusu';
* $config['smtp_user'] = 'smtp_kullanici_adi';
* $config['smtp_pass'] = 'smtp_sifresi';
* $config['smtp_port'] = smtp_portu;
*
* Belirlediğimiz ayarlarla e-posta gönderimine başlıyoruz.
*/
$this->email->initialize($config);
/*
* Kimden
*/
$this->email->from($data['email'], $data['name']);
/*
* Kime
*/
$this->email->to('gonderilecek@adres.com');
/*
* E-posta konusu
*/
$this->email->subject('İletişim Formundan Yeni Mesaj');
/*
* E-posta içeriği.
* Html kodlarını buraya yazmak yerine iletisim-html.php dosyasına yazıyoruz ki kodlarımız fazla karışık olmasın.
*/
$this->email->message($this->load->view('iletisim-html', $data, TRUE));
/*
* send() fonksiyonuyla e-postayı gönderiyoruz.
*/
if($this->email->send()) {
return TRUE;
} else {
return FALSE;
}
}
}
Buradaki index metodunda Form_validation kütüphanesinden faydalanarak gerekli kontrolleri yapıyoruz. Formdan gelen bilgiler eksiksiz ve hatasız ise _send_email fonksiyonu ile e-postayı gönderiyoruz. Aksi bir durumda ise view dosyamızı görüntülüyoruz.
_send_email fonksiyonunda Email kütüphanesini yükledikten sonra bu kütüphaneyi kullanmak için gerekli olan ayarları $config dizisinde tanımlayarak işleme devam ediyoruz. $data dizisinden gelen verilerle gerekli atamaları yaptıktan sonra e-postayı gönderiyoruz. Kodların daha düzenli durması için application/views dizinine iletisim-html.php isimli bir dosya oluşturarak gönderilecek mesajın sabit html kodlarını buraya kaydediyoruz. Bu fonksiyon e-posta gönderimi başarılı olursa TRUE, başarısız olursa ise FALSE döndürüyor. Bizde dönen değere göre kullanıcıya gönderildi veya gönderilemedi bilgisini veriyoruz.
İletişim formumuzun bulunacağı iletisim.php dosyamızı aşağıdaki gibi hazırlayıp application/views dizinine kaydediyoruz.
<?php
// Form alanlarını oluşturmak için form yardımcısını kullanacağız. Bu alanlar için kullanacağımız özellikleri tanımlıyoruz.
$email = array(
'name' => 'email',
'id' => 'email',
'value' => set_value('email'),
'maxlength' => 80,
'size' => 30,
);
$name = array(
'name' => 'name',
'id' => 'name',
'value' => set_value('name'),
'maxlength' => 50,
'size' => 30,
);
$message = array(
'name' => 'message',
'id' => 'message',
'value' => set_value('message'),
'rows' => 10,
'cols' => 30,
);?>
<html>
<head>
<title>CodeIgniter İletişim Formu</title>
<style type="text/css">
body { background-color: #fff; margin: 40px; font-family: Lucida Grande, Verdana, Sans-serif; font-size: 14px; color: #4F5155;}
a { color: #003399; background-color: transparent; font-weight: normal;}
h1 { color: #444; background-color: transparent; border-bottom: 1px solid #D0D0D0; font-size: 16px; font-weight: bold; margin: 24px 0 2px 0; padding: 5px 0 6px 0;}
form {width:600px;}
form label { width:28%; display:block; float:left; margin:2px; cursor:pointer;}
form input[type="text"],
form textarea{ width:70%; display:block; float:left; margin:2px;}
form input[type="submit"]{margin:2px 2px 2px 28%;}
</style>
</head>
<body>
<?php echo form_open($this->uri->uri_string()); ?>
<?php echo form_fieldset('İletişim Formu'); ?>
<div class="type-text">
<?php echo form_label('İsim', $name['id']); ?>
<?php echo form_input($name); ?>
<?php echo form_error($name['name']); ?>
</div>
<div class="type-text">
<?php echo form_label('E-Posta Adresi', $email['id']); ?>
<?php echo form_input($email); ?>
<?php echo form_error($email['name']); ?>
</div>
<div class="type-text">
<?php echo form_label('Mesajınız', $message['id']); ?>
<?php echo form_textarea($message); ?>
<?php echo form_error($message['name']); ?>
</div>
<?php echo form_submit('send', 'Gönder'); ?>
<?php echo form_fieldset_close();?>
<?php echo form_close(); ?>
</body>
</html>
Görüldüğü gibi bu dosya iletişim formumuz için gerekli olan html kodlarını barındırıyor.
Son olarak gönderilen e-postanın sabit html kodlarını içeren iletisim-html.php dosyasını application/views dizinine aşağıdaki kodları ekleyerek kaydediyoruz.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><title>İletişim Formu'ndan Mesaj Var!</title></head>
<body>
<div style="max-width: 800px; margin: 0; padding: 30px 0;">
<table width="80%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="5%"></td>
<td align="left" width="95%" style="font: 13px/18px Arial, Helvetica, sans-serif;">
<h2 style="font: normal 20px/23px Arial, Helvetica, sans-serif; margin: 0; padding: 0 0 18px; color: black;">
İletişim Formu üzerinden yeni mesaj aldınız!</h2>
<b>Gönderen : </b> <?php echo $name;?><br>
<b>E-Posta Adresi : </b> <?php echo $email;?><br>
<b>Tarih : </b> <?php echo date('d-M-Y',time());?><br>
<b>Mesaj : </b>
<?php echo $message;?>
</td>
</tr>
</table>
</div>
</body>
</html>
İletişim Formu uygulamasının kodlarını indirmek için tıklayın.