Tips & Trik Codeigniter : Library Cart Pada Codeigniter Hanya Dapat Menampung 10 Item…???

Kali ini saya benar-benar merasakan bagaimana menjadi seorang mahasiswa tingkat akhir, yaw tidak jauh-jauh dari yang namanya skripsi. Dan yang benar-benar mengganjal adalah bagian tulis-menulisnya :). Kadang saya butuh mood yang bagus untuk menulis, sama dengan membuat desain. Beda ketika disuruh untuk berkutat dengan pemrograman, apalagi kalau ada permintaan mendadak dari client, langsung bisa saya kebut. Untunglah ada seseorang yang beberapa hari ini membuat saya lebih bersemangat :p. Dan kabar baiknya, sekarang saya sudah tidak menyandang gelar STMJ (Semester Tua Masih Jomblo) lagi, sudah ada yang bisa mengalihkan perhatian saya selain laptop dan gadget-gadget aneh yang menemani saya selama ini. Karena sesuai janji saya, setelah punya macbook harus segera mencari jodoh #haha. Nah, pada postingan kali ini saya ingin berbagi sedikit tips & trik CodeIgniter sederhana. Sebenarnya sudah banyak sih yang membahas, tapi tak apalah saya bahas disini, hitung-hitung untuk bacaan di kala saya lupa nanti.

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 :

$config['sess_use_database']	= FALSE;
$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 :

$config['sess_use_database']	= TRUE;
$config['sess_table_name']	= 'ci_sessions';
CREATE TABLE IF NOT EXISTS `ci_sessions` (
  `session_id` varchar(40) NOT NULL DEFAULT '0',
  `ip_address` varchar(16) NOT NULL DEFAULT '0',
  `user_agent` varchar(120) NOT NULL,
  `last_activity` int(10) unsigned NOT NULL DEFAULT '0',
  `user_data` text NOT NULL,
  PRIMARY KEY (`session_id`),
  KEY `last_activity_idx` (`last_activity`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

3. Buat class controller sederhana yang memanfaatkan library cart, seperti di bawah ini :

class Cart extends CI_Controller {

	public function index()
	{
		$q['produk'] = $this->db->get("tbl_produk");
		$this->load->view('home',$q);
	}

	public function tambah()
	{
		$data = array(
			'id'      => $this->input->post('kode'),
			'qty'     => 1,
			'price'   => $this->input->post('harga'),
			'name'    => $this->input->post('nama'));
		$this->cart->insert($data);
		header('location:'.base_url().'');
	}

	public function hapus()
	{
		$data = array(
				'rowid' => $this->uri->segment(3),
				'qty'   => 0);
				$this->cart->update($data);
		header('location:'.base_url().'');
	}
}

4. Dan jangan lupa untuk membuat view nya, cukup yang sederhana saja.

<div id="container">

	<div id="body">
		<?php
			$no = 1;
			foreach($produk->result_array() as $p)
			{
				echo form_open('cart/tambah');
		?>
				<p><?php echo $no; ?>. Sandal <?php echo $p['nama_produk']; ?><span class="add">
				Rp. <?php echo number_format($p['harga'],2,',','.'); ?>
				<input type="hidden" name="nama" value="Sandal <?php echo $p['nama_produk']; ?>">
				<input type="hidden" name="harga" value="<?php echo $p['harga']; ?>">
				<input type="hidden" name="kode" value="<?php echo $p['kode_produk']; ?>">
				<input type="submit" value="Tambah">

				</span></p>
		<?php
				echo form_close();
				$no++;
			}
		?>
	</div>

	<div id="body">
		<?php foreach($this->cart->contents() as $items): ?>
				<p><?php echo $items['name']; ?><span class="add">Rp. <?php echo number_format($items['price'],2,',','.'); ?>
				<a href="<?php echo base_url(); ?>index.php/cart/hapus/<?php echo $items['rowid']; ?>">x</a>
				</span></p>
		<?php endforeach; ?>
	</div>
</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

Cheerrrss….!!!!

Minta Like’nya dulu yaw gan, abis itu link downloadnya baru nongol. Hehe, cukup sedekah like aje gan, gak bakal berkurang kok cadangan like ente :p. Pake firefox gak muncul??? Coba pake chrome yak :). Ruwet..?? Silahkan buat sendiri aja, kalo gak mau pake cara gampang yang tinggal klik doang :p
[l2g facebook=”true” twitter=”false” gplusone=”false” name=”Download File Artikel Ini” id=”999″]Download Aplikasi[/l2g]

12 comments

  1. yeyep sudrajat Reply

    Bli..STMJ juga…Semester Tua Makin Jempolan aje…SUKSES selalu ya Bli…ayo kebut atuh TA-nya…

  2. Supardi Reply

    Mas Yeyep sekarang tingkat akhir ambil S1 atau D3 ? ….
    Biar cepet selesai dan cepet kerja dan cepet cari jodoh 🙂
    Tinggal dimana mas ? ….

    Salam Kenal,
    Supardi.

  3. fatah Reply

    gan….mao nanya skrip yang ini
    $data = array(
    ‘id’ => $this->input->post(‘kode’),
    ‘qty’ => 1,
    ‘price’ => $this->input->post(‘harga’),
    ‘name’ => $this->input->post(‘nama’));
    $this->cart->insert($data); ——–> itu ngambil di model apa di controller “insert($data)”
    header(‘location:’.base_url().”);

  4. ann Reply

    kak .. mau nanya
    saya ada bikin cart pake codeignitier jg
    udah setting session k database di config
    trus kl diliat, ud masuk jg cart itemnya d tabel ci_session
    tp tetep aj, kl brgnya ud lebih dr 10, nanti cart itemnya hilang semua, termasuk user_data yg d tabel ci_sessionnya

    kl ky gitu, gara” ap yah?

    • Gede Lumbung Post authorReply

      saya belum pernah menemui permasalahn seperti itu, kalo sudah dipindahkan ke database, cart dengan jumlah 10 item tetap bisa bertambah lg

  5. miloo Reply

    Mau nanya dong mas gede, saya make cara ini. Session dengan menggunakan tabel dari database. Tapi kenapa ya saat login malah jadi tidak mau?

  6. aji Reply

    mas mau tanya ni saya punya kasus gini, misal dalam session cart ada data kaya gini.
    idtoko, idbarang, jumlah, harga
    toko1, brg1, 3, 90000
    toko1, brg2, 4, 50000
    toko2, brg4, 1, 20000
    toko2, brg5, 3, 30000

    nah ketika mau ditampilin di kantong itu cuma yang ada di toko1 gimana ya?
    contoh yang di tampilin dalam kantong yang idtoko nya di segment(3)?
    makasih mas.

  7. Faiz Mubarak Reply

    Anjritt sederhana banget gan 😀 mantafff daghh,,, hampir aja mw capek2 bikin library cart yang baru 😀 thx alot gaannnnnn

  8. nur Reply

    kg kalau seumpama dikasih stok.
    contoh kasus sewaktu update stok, terlebih dahulu untuk mengecek stok yang tersedia. jadi jangan asal masuk quantity. jadi kalau kalau stok kurang dari yang dipesan bisa ditampilkan warning. bagaimana solusinya?

  9. Ali Akbar Reply

    Gan mau nanya nih, gimana masukin isi cart codeigniter kedalam database..?