Kadir Özdemir

  • Ben Kimim
  • PHP
  • Sencha Touch
  • Home/
  • PHP /
  • Silverstripe: Sorgulari Cachleme

Silverstripe: Sorgulari Cachleme

Skorp 26.03.2012 Comments Off on Silverstripe: Sorgulari Cachleme

Silverstripe de genellikle birbiriyle iliskili birden cok nesne ile calisiriz. Bu nesneler ile calismak kod yazarken nekadar güzel olsada, sitenin performansini oldukca etkilemektedir.

Silverstripe bu konuda cok kolay bir cache Sistemi kullanmakda.

Böyle basit bir sorgumuz var sayalim

$result = DataObject::get('ProductCategory',"URLSegment='".Convert::raw2sql($urlSegment)."'");

Bu sorgu icin yeni bir fonksiyon yazalim ve bakalim sorunu nasil cözeriz.

protected function getCategoryID($urlSegment) {
    //cachekey olusturalim
    //preg_replace kullanmamiz lazim cünki Zend_Cache a-zA-Z_0-9 disindaki karakterlere izin vermiyor
    $cachekey = 'Cache_Category'.preg_replace('/-/','_',$urlSegment);
    // SS_Cache in factory methodu üzerinden cache objesini olusturalim
    $cache       = SS_Cache::factory($cachekey);
    //cache yükliyelim
    $result     = $cache->load($cachekey);
    //cache varsa unserialize yapip result degiskenine atiyalim
    if ($result) {
	$result = unserialize($result);
    } else {
        //cache yoksa veya süresi gecmisse yukaridaki sorgumuzu calistirip kaydedelim
	$result = DataObject::get('ProductCategory',"URLSegment='".Convert::raw2sql($urlSegment)."'");
	$cache->save(serialize($result));
    }
    return $result;
}

UPDATE: 17.05.2012
Pagination ve resimli iliskilerde serialize yüzünden cikan sorunlar yüzünden cache i biraz degistirdik.

protected function getCategoryID($urlSegment) {
if (!isset($_GET['start']) || !is_numeric($_GET['start'])){
			$start = 0;
		} else {
			$start = intval($_GET['start']);
		}
    $cachekey = 'Cache_Category'.preg_replace('/-/','_',$urlSegment);
    $cache       = SS_Cache::factory($cachekey);
    $result     = $cache->load($cachekey);
    if ($result) {
	$result = unserialize($result);
        //kayit ettigimiz arrayi bir DataObjectSet e ceviriyoruz.
        $doSet = $this->buildDataObjectSet($result, 'DataObjectSet', $this->class);
        //pagination icin limitleri belirleyelim
	$doSet->setPageLimits($start, 10, $doSet->Count());
	return $doSet;
    } else {
	$result = DataObject::get('ProductCategory',"URLSegment='".Convert::raw2sql($urlSegment)."'");
        //tüm icerikleri bir Array e alip, cache e öyle kayit ediyoruz.
        if($result!= null) {
	     $saveArr = array();
              foreach($result as $value) {
		$saveArr[] = $value->getAllFields();
	     }
	    $cache->save(serialize($saveArr));
	}
    }
    return $result;
}

Bu arada yukaridada yazdigim gibi SS_Cache arka planda Zend_Cache kullanmakda.
Template de degisen birsey yok.
Template cache lerine birdahaki yazimizda anlatmaya calisacagim.

Silverstripe API: http://api.silverstripe.org/2.4/sapphire/core/SS_Cache.html

Skorp
2012-03-26
Tags:
PHP Silverstripe
Share story:
← PreviousPhp 5.4 yayinlandi
Next →Spamassassin test

Written by Skorp

View all articles by Skorp

Website: https://www.skorp.eu

Related Articles

  • Silverstripe snippetler

  • Silverstripe login sorunu

  • Php 5.4 yayinlandi

  • Silverstripe yeni sayfa tipleri

  • Silverstripe

Comments are closed.

Social networks

Etiket Bulutu

Android Bilgisayar & Internet C# Cms css diger Kodlar featured Genel Java Javascript Linux Mobile PHP Silverstripe typo3 Veritabani Windows Zend Framework

Links

  • H E R K O N U
  • Hüseyin Koyun
  • Urban23k

Son Yorumlar

  • Onur on Primary Key – Unique ve Index nedir?
  • sezer fidancı on Centos de apache, php ve mysql kurulumu
  • React Native | Kadir Özdemir on React Native – Kurulum
  • React Native – Kurulum | Kadir Özdemir on React Native
  • serkan on Ben Kimim

Twitter

Follow @skorp54
    There is an error in twitter widget, please make sure that you have set up the Twitter API settings
  • Ben Kimim
  • PHP
  • Sencha Touch

Arsivler

Kategoriler

Copyright © 2014 webberz.at