Sabtu, 17 November 2012



  • Beberapa waktu yang lalu saya mendapatkan kasus, dimana library cart pada codeigniter tidak dapat menampung item lebih dari 10. Kebetulan saat itu saya membuat sebuah aplikasi faktur penjualan, dimana aplikasi faktur penjualan biasanya berbasis desktop dan kali ini diminta untuk membuat versi web based-nya. Yang membuat saya cukup bingung ialah ketika user menambahkan barang pesanan dan bagaimana agar daftar barang pesanan tersebut tidak hilang ketika terjadi halaman di-refresh. Muncullah ide saya untuk memanfaatkan library cart dari codeigniter untuk menyimpan daftar barang yang telah disimpan karena konsepnya sama dengan aplikasi shopping cart. Dan muncul lagi permasalahan ketika saya mencoba untuk menambahkan pesanan lebih dari 10 item, ternyata batas maksimal hanya bisa menampung 10 item.
    Setelah mencoba membaca user guide + membedah librarynya, ternyata solusinya sangat sederhana yaitu mengubah penyimpanan session cart ke dalam database atau bahasa kasarnya semua informasi yang disimpan di dalam session di simpan ke dalam database. Kemudian dibuatkan sebuah tabel khusus untuk menampung semua data session tersebut. Masih bingung??? Ayookk kita coba ke impelementasi nyatanya…
    1. Siapkan sebuah controller atau project yang rekan-rekan miliki, dimana menggunakan library cart. Atau kalau malas membuatnya :p, di akhir postingan seperti biasa contohnya bisa di donlod. Untuk tahap pertama, kita akan mengubah konfigurasi yang berada di file /application/config.php. Cari baris seperti di bawah ini :
    1$config['sess_use_database']    = FALSE;
    2$config['sess_table_name']  = 'ci_sessions';
    2. Baris di atas (sess_use_database), adalah konfigurasi default dari codeigniter dalam penyimpanan session. Jika kita ubah nilainya menjadi TRUE, maka semua data session akan dipindahkan ke dalam database. Dan pada konfigurasi sess_table_name, adalah nama tabel yang digunakan untuk menyimpan data session. Silahkan nilainya diubah menjadi TRUE, kemudian buka phpmyadmin dan buat sebuah table dengan query seperti di bawah ini :
    1$config['sess_use_database']    = TRUE;
    2$config['sess_table_name']  = 'ci_sessions';

    1CREATE TABLE IF NOT EXISTS `ci_sessions` (
    2  `session_id` varchar(40) NOT NULL DEFAULT '0',
    3  `ip_address` varchar(16) NOT NULL DEFAULT '0',
    4  `user_agent` varchar(120) NOT NULL,
    5  `last_activity` int(10) unsigned NOT NULL DEFAULT '0',
    6  `user_data` text NOT NULL,
    7  PRIMARY KEY (`session_id`),
    8  KEY `last_activity_idx` (`last_activity`)
    9) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    3. Buat class controller sederhana yang memanfaatkan library cart, seperti di bawah ini :
    1class Cart extends CI_Controller {
    2
    3    public function index()
    4    {
    5        $q['produk'] = $this->db->get("tbl_produk");
    6        $this->load->view('home',$q);
    7    }
    8
    9    public function tambah()
    10    {
    11        $data = array(
    12            'id'      => $this->input->post('kode'),
    13            'qty'     => 1,
    14            'price'   => $this->input->post('harga'),
    15            'name'    => $this->input->post('nama'));
    16        $this->cart->insert($data);
    17        header('location:'.base_url().'');
    18    }
    19
    20    public function hapus()
    21    {
    22        $data = array(
    23                'rowid' => $this->uri->segment(3),
    24                'qty'   => 0);
    25                $this->cart->update($data);
    26        header('location:'.base_url().'');
    27    }
    28}
    4. Dan jangan lupa untuk membuat view nya, cukup yang sederhana saja.
    1<div id="container">
    2
    3    <div id="body">
    4        <?php
    5            $no = 1;
    6            foreach($produk->result_array() as $p)
    7            {
    8                echo form_open('cart/tambah');
    9        ?>
    10                <p><?php echo $no; ?>. Sandal <?php echo $p['nama_produk']; ?><span class="add">
    11                Rp. <?php echo number_format($p['harga'],2,',','.'); ?>
    12                <input type="hidden" name="nama" value="Sandal <?php echo $p['nama_produk']; ?>">
    13                <input type="hidden" name="harga" value="<?php echo $p['harga']; ?>">
    14                <input type="hidden" name="kode" value="<?php echo $p['kode_produk']; ?>">
    15                <input type="submit" value="Tambah">
    16
    17                </span></p>
    18        <?php
    19                echo form_close();
    20                $no++;
    21            }
    22        ?>
    23    </div>
    24
    25    <div id="body">
    26        <?php foreach($this->cart->contents() as $items): ?>
    27                <p><?php echo $items['name']; ?><span class="add">Rp. <?php echo number_format($items['price'],2,',','.'); ?>
    28                <a href="<?php echo base_url(); ?>index.php/cart/hapus/<?php echo $items['rowid']; ?>">x</a>
    29                </span></p>
    30        <?php endforeach; ?>
    31    </div>
    32</div>
    5. Jalankan di browser, dan coba untuk memasukkan lebih dari 10 produk ke dalam keranjang belanja. Untuk perbandingan, silahkan unah konfigurasi session di atas menjadi FALSE. Maka maksimal produk yang dapat disimpan ke dalam cart hanya 10.
    Mungkin ada pertanyaan, “Ada gak sih kelebihan dan kekurangannya dari masing-masing cara di atas? “. Masing-masing cara di atas pastinya mempunyai kelebihan dan kekurangan, contohnya yang sempat saya rasakan dari cara yang menyimpan session ke dalam database adalah waktu komputasinya yang lebih lambat sekian detik. Kenapa..??? Yaw logikanya kan setiap akses yang membutuhkan session akan mengakses database untuk mencocokkan datanya. Pastinya lebih lambat jika dibandingkan dengan session yang disimpan ke dalam memori. OK deh, sekian dulu postingan saya kali ini. Semoga bermanfaat untuk rekan-rekan yang kebetulan mungkin sedang dipusingkan dengan fungsi Cart di CodeIgniter :D .
    Happy Blogging and Keep Coding

    http://download.gedelumbung.com/donlod/detail/116
  • 0 komentar:

    Posting Komentar

    Copyright @ 2014 Diary Studio | The Best Solution | Jasa Pembuatan Website.

    Designed by Diary | TechTabloids