Salı, 6 Ekim 2009

Alışveriş Sepeti Uygulamasındaki Sorunlar

 

CodeIgniter 1.7.2 versiyonu ile alışveriş sepeti uygulamasını standart dağıtım paketine aldı. Böylece ayrı bir kütüphane yazmamıza gerek kalmaksızın CodeIgniter içinden kendi alışveriş sepeti uygulamamızı yükleyebiliyoruz.

Bu konu ile ilgili daha önceki bu yazımda, alışveriş sepeti uygulamasının nasıl yüklendiği ve çalışma biçimi hakkında anlattıklarım halen geçerlidir. Sadece o yazıda anlatılan application/libraries dizini altına cart.php dosyasını yüklememize gerek kalmamıştır. Bu yazıda ise uygulama sırasında ortaya çıkan bazı aksaklıkların nasıl giderildiğine dair çözümleri bulacaksınız.

Problem : Alışveriş sepetine Türkçe isimli ürünleri attığımızda sorun yaşanmaktadır. Ürünler sepete eklenmiyor.

Çözüm : Bu sorunu gidermek için system/libraries dizini altındaki Cart.php dosyasında bulunan $product_name_rules isimli değişkenini aşağıdaki şekilde düzeltmemiz gerekmektedir.

var $product_name_rules = '\.\:\-_ a-üöçşığz A-ÜÖÇŞİĞZ 0-9';

Problem : Alışveriş sepetine sınırlı sayıda ürün ekleyebiliyoruz.

Çözüm : Bu sorun CodeIgniter session kütüphanesi limitinin 4kb olmasından kaynaklanmaktadır. Sorunu gidermek için session kütüphanesinin veritabanına yazmasına izin vermemiz gerekir. Bu işlem için öncelikle veritabanına açmamız gereken tablonun sql cümlesini yazalım.

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(50) NOT NULL default '',
  `last_activity` int(10) unsigned NOT NULL default '0',
  `user_data` longtext NOT NULL,
  PRIMARY KEY  (`session_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Bu cümlede dikkat etmemiz gereken user_data kolonu büyüklüğüdür. User_data kolonu alışveriş sepeti içinde tutmak istediğimiz bilgilerin de yazılacağı kolondur. O nedenle `longtext´ formatında açtım. Çünkü bazı bilgiler eklenirken text formatında sorun yaşadım. Siz kendinize uygun olarak formatı değiştirebilirsiniz.

Tablomuzu da oluşturduktan sonra session değerlerinin veritabanına yazdırmak için application/system dizinindeki config.php dosyasındaki aşağıdaki satırı TRUE olarak değiştiriyoruz:

$config['sess_use_database'] = TRUE;

Yukarıda anlattığım şekilde hazırladığım kodların çalışan halini bu adreste izlemeniz mümkündür. Bu konu ile ilgili tespit ettiğiniz sorunlarınız olursa çözümlerini burada anlatmaya devam edebilirim.

Yorumlar

3 günü aşmış sessionları dbden nasıl sileriz

@mehmetduran: session kütüphanesindeki session_destroy() fonksiyonu ile kullanılmayan oturumları silebilirsin. Mutlaka 3 gün öncesini sileceksen MY_Session kütüphanesi yazarak kendi session_destroy() fonksiyonunu oluşturmalısın.

Eğer session değerlerini veritabanında tutuyorsanız, database.php dosyasındaki değerlerinizi düzgün olarak ayarlamanız gereklidir. Veritabanı kütüphanesini yüklemesiniz dahi CodeIgniter çalşıtırmaktadır.

sayın fatih bu sepetın calısan kodlarını temız etmemız mumkunmudur acaba kullanıcıların faydalanabılmesı ıcın kaynak kodlarını ındırebılme ımkanımız varmı

@efehan: Yazımda refere ettiğim bu yazıda bulunan linkten kodları indirebilirsin.

Merhaba. Bu class'ı kullanarak sepet uygulaması yapacağım fakat bunun session'da tutulmasının kullanıcı çıkış yaptığında sepetinde silinmesi anlamına geldiğini düşünüyorum. Fakat benim isteğim sepettekilerin onay verilene kadar saklı kalması. session'ı sadece güvenlik için kullanıp sepeti kullanıcıya ait tabloda saklamamız mümkün müdür?

@İlker: Tahmin ettiğin gibi session tablosun, kullanıcı siteden ayrılınca silinir. Bu nedenle yapmayı istediğin opsiyon için farklı bir tablo üzerinde bu bilgileri saklaman gerekir.

Peki bu opsiyon için cart class'ını nasıl düzenlemeliyim? Bir öneriniz yada fikriniz var mı?

@İlker: Bu konu ile ilgili olarak Google gruptan yardım alabilirsin.

Yorum Ekle