Integrasi TinyMce dengan CodeIgniter

Dalam pengaturan tulisan yang akan dipos, perlu sebuah editor teks WYSIWYG (What You See Is What You Get).TinyMCE, merupakan salah satu open source JavaScript editor teks. Dengan editor ini, para blogger akan lebih mudah mengatur layout tulisan yang akan disimpan.

Integrasi TinyMCE dengan CI yang mempunyai konsep MVC dapat dilakukan dengan cara sebagai berikut :

1)       Definisikan variabel tinyMCE pada konstruktor controller halaman yang akan diintegrasi dengan TinyMCE. Pastikan path TinyMCE sudah benar.

class Myprofile extends Controller{ function Myprofile(){ parent::Controller(); $this-> tinyMce = ' <!-- TinyMCE --> <script src="'. base_url().'../js/tiny_mce/tiny_mce.js"></script> <script type="text/javascript"> tinyMCE.init({ mode : "textareas", theme : "simple" });</script > <!-- /TinyMCE --> '; . . . }

2)       Cetak variabel di atas pada view halaman yang di dalamnya terdapat textarea.

<?= $this-> tinyMce; ?>

Selain theme simple, kita juga dapat menampilkan TinyMce dalam versi “advance” yang tampilannya mirip seperti Ms. Word.

Berikut contoh hasil textarea yang berubah menjadi editor simple TinyMCE:

tiny_simple_version

Advertisements

Contoh Implementasi Form Validasi Input dengan CodeIgniter

Validasi input pada formulir penting untuk diterapkan untuk meminimalisir kesalahan input dari sisi user. CodeIgniter telah menangani isu ini dengan pintar. Sehingga programmer PHP tidak perlu membuat fungsi lagi pada setiap formulir dengan REGEX (fungsi validasi pada PHP).

Validasi dengan CI framework cukup dilakukan dengan memanggil library form_validation. Dengan library ini, kita dapat sekaligus menerapkan rule pada setiap field, dan menentukan di mana pesan error akan ditampilkan. Isi pesan error tidak perlu didefinisikan lagi jika bahasa website kita menggunakan Bahasa Inggris.

Berikut ini poin penting dalam penerapan validasi input dengan CI :

1)       Panggil library form_validation.

2)       Buat formulir dan set value tiap field dengan kode <?= set_value(‘<nama_variabel_field>’)?>

3)       Tentukan di mana akan menampilkan pesan error. Lalu ketik kode <?= form_error(‘<nama_variabel_field>’);?>

4)       Buat controller tersendiri untuk menangani aksi dari formulir. Definisikan rule validasi dan cek validasi sebelum mengirim pesan error/sukses.

Contoh penerapan validasi pada blog engine ini terdapat pada formulir register. Di bawah ini potongan kode dari View untuk menampilkan formulir:

<?php
/*– BOF REGISTER FORM –*/
echo form_open(‘register/save’);
echo form_fieldset(‘Account Registration’);
echo “<table border=’0′>”;
$mname = array(
‘name’        =>’mname’,
‘id’          => ‘mname’,
‘maxlength’   => ’50’,
‘size’        => ’50’,
‘style’       => ‘width:95%’,);
$uname = array(
‘name’        => ‘uname’,
‘id’          => ‘uname’,
‘maxlength’   => ’50’,
‘size’        => ’50’,
‘style’       => ‘width:95%’);
$passw = array(
‘name’        => ‘passw’,
‘id’          => ‘passw’,
‘maxlength’   => ’50’,
‘size’        => ’50’,
‘style’       => ‘width:95%’);
$cpassw = array(
‘name’        => ‘cpassw’,
‘id’          => ‘cpassw’,
‘maxlength’   => ’50’,
‘size’        => ’50’,
‘style’       => ‘width:95%’);
$reg = array(
array(”,”,”,”,”),
array(form_label(‘Name’,’mname’), ‘ : ‘,
form_input($mname,set_value(‘mname’)),”,”),
array(”,”,form_error(‘mname’),”,”),
array(form_label(‘Your Email *)’,’uname’), ‘ : ‘, form_input($uname,set_value(‘uname’)),’* This will be your username’,”),
array(”,”,form_error(‘uname’),”,”),
array(form_label(‘Your Bloggy Password’,’passw’), ‘ : ‘,form_password($passw) ,’min. 5 character’,”),
array(”,”,form_error(‘passw’),”,”),
array(form_label(‘Confirm Password’,’cpassw’), ‘ : ‘,
form_password($cpassw),”,’&nbsp;’),
array(”,”,form_error(‘cpassw’),”,”),
array(form_label(‘Blog\’s Name **)’,’blog_name’), ‘ : ‘,
form_input(‘blog_name’,set_value(‘blog_name’)),’** This will be displayed on your header’,”),
array(”,”,form_error(‘blog_name’),”,”),
array(form_label(‘Motto’,’motto’), ‘ : ‘,
form_input(‘motto’,set_value(‘motto’)),”,”),
array(”,”,form_error(‘motto’),”,”),
array(form_label(‘Your Blog URL’,’url_blog’).'<small> ***)</small>’, ‘ : ‘, form_input(‘url_blog’,set_value(‘url_blog’)),'<small>*** ‘.htmlentities(‘url link : http://www.bloggy.com/<your URL name>’).'</small>’,”),
array(”,”,form_error(‘url_blog’),”,”),
array(”, ”,form_submit(‘reg_submit’,’REGISTER!’),”,”));
echo $this->table->generate($reg);
echo form_fieldset_close();
echo form_close();
/*——  END OF REGISTER FORM ——*/

?>

Pada controller diterapkan rule :

1)       Nama harus lebih dari 3.

2)       Username merupakan email member, jadi harus diisi valid email.

3)       Password harus sama dengan konfirmasi dan panjang minimal 5 karakter.

4)       Nama blog kurang dari 50 karakter.

5)       Motto kurang dari 100 karakter.

6)       URL blog maksimum 255 karakter dan belum ada yang memakai nama URL dalam database.

Kode pada controller register :

function save(){
$rules = array(
array(
‘field’   => ‘mname’,
‘label’   => ‘Name’,
‘rules’   =>’required|min_length[3]|max_length[255]’
),
array(
‘field’   => ‘uname’,
‘label’   => ‘Your Email’,
‘rules’   =>’required|valid_email|max_length[255]’
),
array(
‘field’   => ‘passw’,
‘label’   => ‘Your Blo99y Password’,
‘rules’   => ‘required|matches[cpassw]|min_length[5]’
),
array(
‘field’   => ‘cpassw’,
‘label’   => ‘Confirm Password’,
‘rules’   =>’required|min_length[5]’
),
array(
‘field’   => ‘blog_name’,
‘label’   => ‘Blog\’s Name’,
‘rules’   =>’required|max_length[50]’
),
array(
‘field’   => ‘motto’,
‘label’   => ‘Motto’,
‘rules’   =>’required|max_length[100]’
),
array(
‘field’   => ‘url_blog’,
‘label’   => ‘Your Blog URL’,
‘rules’   =>’required|max_length[255]|callback_url_check’
));
$this->form_validation->set_rules($rules);
if($this->form_validation->run()==FALSE){
$this->load->view(‘vreg’);
$this->load->view(‘footer’);
}else{
//adding member
$this->load->model(‘regModel’);
$row = $this->regModel->insert_entry();
//get member_id
$id = $row->id;
$success_text=$this->create_db_user($id,$this->input->post(‘mname’));
if($success_text!=false)
$this->session->set_flashdata(array(‘success’=>true,’success_text’=>$success_text));
else
$this->session->set_flashdata(array(‘error’=>true,’error_text’=>’Sorry, there\’re some troubles appear on processing your account.’));
$this->session->set_flashdata($_POST);
redirect(‘home’);
}
}
function url_check($str){
$this->load->model(‘gen_setting’);
if($this->gen_setting->is_url_exist($str)){
$this->form_validation->set_message(‘url_check’, ‘The %s is not available. It is already exist’);
return false;
}else
return true;
}

Sedangkan hasil validasinya digambarkan sebagai berikut :

register_form_validation

Hasil validasi pada formulir register

Upload Gambar dengan CodeIgniter

Upload gambar dengan CI dilakukan dengan memanggil ’upload’ library. Dengan library ini, konfigurasi yang diperlukan hanya dilakukan untuk mendefinisikan :

1)                   ke path mana gambar akan disimpan,

2)                   tipe file apa saja yang diperbolehkan,

3)                   batasan besar file,

4)                   lebar maksimum, dan

5)                   tinggi maksimum gambar.

Setelah definisi selesai, proses upload akan dilakukan lewat fungsi do_upload:

$this->upload->do_upload('photo');

Dengan ’photo’ merupakan nama variabel dari file field. Berikut ini fungsi pada controller ’myprofile’ untuk mengubah foto pada website blog engine :

function gochange(){

$data=$this->data;

$data['title_header']=htmlentities(".: Change My Photo :.");

$this->load->view('header',$data);

$this->load->view('member/mmenu');

$config['upload_path'] = '../upload/';

$config['allowed_types'] = 'gif|jpg|png|bmp';

$config['max_size'] = '100';

$config['max_width'] = '1024';

$config['max_height'] = '768';

$this->load->library('upload',$config);

if(!$this->upload->do_upload('photo')) {

$flashdata = array('error' => true,'error_text'=>$this->upload->display_errors());

$this->session->set_flashdata($flashdata);

$this->session->set_flashdata($_POST);

redirect('myprofile/change_pic');

}else{

$data = array('upload_data'=>$this->upload->data());

$this->load->model('profile');

$this->profile->update_pic($data['upload_data']['file_name']);

redirect('myprofile/view/1');

}

$this->load->view('footer');

}

Implementasi Multiple Database dengan CodeIgniter (CI)

Contoh bentuk sistem yang menerapkan multiple database dapat Anda lihat di Simple Blog Engine System.

Masih berhubungan dengan sistem tersebut, berikut cara kerja databasenya.

1.  Koneksi Master Database

Koneksi dengan master database merupakan inti dari aliran data blog engine. Oleh karena itu, koneksi dengan database ini wajib dilakukan di saat pengaksesan website. Jika dalam gaya programming PHP biasa, setiap aksi yang mengikutkan database harus meng-include file koneksi.inc atau sejenisnya. Hal ini tidak perlu lagi dilakukan di CI, karena CI menawarkan fasilitas ‘autoload’ yang otomatis akan menjalankan proses yang diinisialisasi di autoload.

Konfigurasi default database awal dilakukan di system/application/config/database.php. Ubah bagian inisialisasi array seperti berikut ini :
$db['default']['hostname'] = "localhost";

$db['default']['username'] = "root";

$db['default']['password'] = "mypassw123";

$db['default']['database'] = "blo99y";

$db['default']['dbdriver'] = "postgre"

Untuk setting autoload database, buka file system/application/config/autoload.php dan tambah :

$autoload['libraries'] = array('database');

2.  Pembuatan Database Member

Proses ini terjadi bersamaan dengan registrasi member. Berikut proses kerja yang terjadi :

flow_chart_db_member

Gambar 1. Flowchart pembuatan database member

Source code proses pada Controller :

function save()
{
$rules = array(
array(
'field' => 'mname',
'label' => 'Name',
'rules' => 'required|min_length[3]|max_length[255]'
),
array(
'field' => 'uname',
'label' => 'Your Email',
'rules' => 'required|valid_email|max_length[255]'
),
array(
'field' => 'passw',
'label' => 'Your Blo99y Password',
'rules' => 'required|matches[cpassw]|min_length[5]'
),
array(
'field' => 'cpassw',
'label' => 'Confirm Password',
'rules' => 'required|min_length[5]'
),
array(
'field' => 'blog_name',
'label' => 'Blog\'s Name',
'rules' => 'required|max_length[50]'
),
array(
'field' => 'motto',
'label' => 'Motto',
'rules' => 'required|max_length[100]'
),
array(
'field' => 'url_blog',
'label' => 'Your Blog URL',
'rules' => 'required|max_length[255]|callback_url_check'
)
);

$this->form_validation->set_rules($rules);

if($this->form_validation->run()==FALSE){
$this->load->view('vreg');
$this->load->view('footer');
}else{
//adding member
$this->load->model('regModel');
$row = $this->regModel->insert_entry();
//get member_id
$id = $row->id;
$success_text=$this->create_db_user($id,$this->input->post('mname'));
if($success_text!=false)
$this->session->set_flashdata(array('success'=>true,'success_text'=>$success_text));
else
$this->session->set_flashdata(array('error'=>true,'error_text'=>'Sorry, there\'re some troubles appear on processing your account.'));

$this->session->set_flashdata($_POST);
redirect('home');
}
}

function url_check($str){
$this->load->model('gen_setting'); $id='';
if($this->gen_setting->is_url_exist($str,$id)){
$this->form_validation->set_message('url_check', 'The %s is not available. It is already exist');
return false;
}else
return true;
}

Fungsi create_db_user :
function create_db_user($id,$name)
{
//substring dbase_name
$mydb = 'db_'.$id;
//echo 'mydbase name = '.$mydb;

//create user's dbase
if ($this->dbforge->create_database($mydb))
{
$dsn = 'postgre://root:yorukochupi2@localhost/'.$mydb.'?char_set=utf8&dbcollat=utf8_general_ci&cache_on=true&cachedir=/path/to/cache';
//$dsn = 'postgre://root:yorukochupi2@localhost/'.$mydb;
$UDB = $this->load->database($dsn,true);

//generate db_schema
$UDB->query('create sequence blog_idb_seq');
$UDB->query("create table blog (idb integer DEFAULT nextval('blog_idb_seq') PRIMARY KEY NOT NULL,idcat integer NOT NULL,title character varying(255),subtitle text,content text,createdin timestamp,createdby character varying(100),bstatus character varying(50))");
$UDB->query('create sequence category_idcat_seq');
$UDB->query("create table category (idcat integer DEFAULT nextval('category_idcat_seq') PRIMARY KEY NOT NULL ,category character varying(100))");
$UDB->query('create sequence comments_idc_seq');
$UDB->query("create table comments (idc integer DEFAULT nextval('comments_idc_seq') PRIMARY KEY NOT NULL,idb integer NOT NULL,name character varying(100), email character varying(255),content text,date timestamp)");

//predefined
//saving blog name and motto
$this->load->model('gen_setting');
$this->gen_setting->predefined($id);
//saving default profile w/ photo
$this->load->model('profile');
$this->profile->default_profile($id,$name);

//generate default category -> general
$this->load->model('category');
$this->category->precategory($id);

//generate default post
$this->load->model('blog');
$this->blog->insert($id);

$success_text = ' You successfully join Bloggy. Now you can login here.';
return $success_text;
}else{
return false;
}
}

Pengujian pembentukan database member:

registration_blog_form

Gambar 2. Formulir halaman registrasi

registration_success_report

Gambar 3. Tampilan pesan saat sukses registrasi

generate_db

Gambar 4. Hasil registrasi dan pembangkitan database member