CodeIgniter Controller/Method adına göre cache gruplandırma
CodeIgniter standart output cache yönteminde sadece bir parametre ile cache süresini belirtmemize izin veriyor ve tüm cache dosyaları tek bir klasörde tutuyor.
Çok uzun süreli cache alınması gereken, fakat güncel olan bir sisteminiz varsa, varsayılan output cache yöntemi bu iş için pek uygun olmuyor (Örneğin: haber, blog, video vb. sistemler). Çünkü parametrede verdiğiniz dakika boyunca cache tutuyor ve siz controller içerisinde cache süresini değiştirseniz de daha önceden alınan cache süresi bitene kadar gösteriyor. Ancak dosyayı silerseniz tekrar çalışıyor.
Bana göre böyle bir durumda olması gereken controller ve methodlarına göre ayrı ayrı klasörler içerisinde gruplandırılarak cache dosyaları oluşturulmasıydı. Ve bu olayı basit bir şekilde kendi çekirdek kütüphanemi oluşturarak yaptım.
Sonuç olarak:
adres: /haberler/detay/123 cache: /cache/haberler/detay/d27d9ff7f12cffdab381fe72a51cb306 adres: /videolar/izle/123 cache: /cache/videolar/izle/1665c19fd83abef189b1e7aa97c24c68 ya da router kullanarak: router: $route['(:any)/(:any)'] = 'blog/yazi/$1/$2'; adres: /kategori/baslik => blog/yazi/kategori/baslik cache: /cache/blog/yazi/8addac4687ec7a85ab8321f2df7fe180
Bu sayede sadece istediğiniz bölümdeki içeriklerin cache dosyalarını silerek güncelleyip, diğer kısımların cache dosyalarının durmasını sağlayabilirsiniz.
Yöntemi uygulamak için buradaki MY_Output.php dosyasını indirip application/core dizininize göndermeniz yeterli.
Grupdan bir cache dosyası silme
Yukarıda bahsettiğim gruplandırma yöntemi ile toptan müdaheleyi kolaylaştırırken bu aşağıdaki helper ile tek tek işlem yapabilirsiniz. Şuradaki yazıda hazırlanmış delete_cache() helper fonksiyonunu benim hazırladığım alt klasörlü grup yöntemine göre yeniden düzenledim.
Örnek kullanımı:
// tek sayfa silmek delete_cache(array('http://www.siteniz.com/kategori/baslik'), 'blog/yazi'); // birden fazla silmek $pages = array( 'http://www.siteniz.com/haberler/detay/123', 'http://www.siteniz.com/haberler/detay/124', 'http://www.siteniz.com/haberler/detay/125'); delete_cache($pages, 'haberler/detay');
Normal hazırlanmış cache helperdan tek farkı; bizim gruplandırma için oluşturduğumuz alt klasörleri ifade etmemiz için sonuna yazmamız gereken alt klasör yolu. Benim son olarak düzenlediğim ve bu grup olayı için olan cache helper dosyasına buradan ulaşabilirsiniz.
Bu yazıda hazırlamak istediğim yöntem diğer cache driverlarını (bkz: memcache, apc) kullanmadan tüm çıktıyı dosya olarak saklamak ve controller çağırdığında hiç bir şey yüklemeden direkt cache dosyasını açmasını isteyenler için idealdir. Yoksa diğer alternatif cache driverları ile istediğiniz bir değişkeni istediğiniz süre cache alabilir ve temizleyebilirsiniz.
Bir başka PHP serüveninde görüşmek üzer sağlıcakla kalın!
Yazılanlar ilgini çektiyse, yenilerinden haberdar olmak için e-mail bültenine abone olabilirsin.
Elinize sağlık musa bey çok güzel bir makale olmuş
Faydalı bir modifikasyon olmuş teşekkürler.
CodeIgniter frameworkü konusunda özellikle de Türkçe yazı bulmak çok güç. Yazılarınızı beğenerek takip ediyorum, teşekkürler.
Merhaba. Güzel bir makale. Teşekkürler.
Güzel paylaşım. Teşekkürler..
Tşk hocam,
birde merak ettiğim konu;
sidebarda üye menusu var doğal olarak her üyeye ayrı görünmesi gerekiyor bu mantıktan çıkarak ben
eğer üye giriş yapmış ise cache() fonksiyonunu çağırdım
fakat sonuç olarak
eper o sayfanın daha önce cache kopyası yokise normal çalışıyor ve cache tutmuyor
fakar o sayfaya ait cache var ise yani başka bir kullanıcı tarafından oluşturuşdu ise yine üye giri olan kullanıcıyada görünüyor
bu konuda bi yorumun var mı acaba
üyeye özel dinamik sayfalar oluşturduğunuz yerlerde cache kullanmayın
Çok güzel bir örnek biz de http://www.adreseyemek.com adresinde codeigniter ve bootsrap kullandık. codeigniter kücük boyutlu olmasına rağmen kullanımı kolay ve hızlı çalışan bir framework herkese tavsiye ederim
Birza giriş seviyesinde örnekler , kurulum ve kullanımla Laravel anlatırsanız sevinirim.