2013-02-13 100 views
1

我喜歡使用CodeIgniters page caching。但我在控制器中有一個視圖計數器,如下所示:CodeIgniter頁面緩存異常

$this->db->query("UPDATE tb_product SET popularity=popularity+1 WHERE product_id=".$this->db->escape($this->uri->segment(2)).""); 

是否可以使用頁面緩存但是隻能運行此查詢的異常?

回答

0

感謝您的回答,但我已經將計數器劃出來並寫了一個cronjob,它將通過Google Analytics(分析)通過GAPI獲取統計信息。

1

是的。你可以嘗試實現一個鉤子。這必須是'cache_override'鉤子。你可以從鉤子做數據庫調用。

http://ellislab.com/codeigniter/user-guide/general/hooks.html

你的鉤子方法將不得不調用原始緩存本身做DB調用之後。

function your_hook() 
{ 

    // your DB code here 

    // Use some CI globals for this, see /system/core/Codeigniter.php 
    if ($OUT->_display_cache($CFG, $URI) == TRUE) 
    { 
     exit; 
    } 
} 

你可以編寫一個自定義的Output.php類並覆蓋(裝飾)原始的_display_cache方法。將你的MY_Ouput.php放在/ application/core目錄下,CI會自動使用它。

http://ellislab.com/codeigniter/user-guide/general/core_classes.html

把這樣的事情在裏面:

class MY_Output extends CI_Output 
{ 
    function _display_cache(&$CFG, &$URI) 
    { 
     // your DB call 

     // The original call 
     return parent::_display_cache($CFG, $URI); 
    } 

} 

我沒有嘗試這個自己,但它應該幫助你對你的方式。其中之一可能會奏效。祝你好運!