我喜歡使用CodeIgniters page caching。但我在控制器中有一個視圖計數器,如下所示:CodeIgniter頁面緩存異常
$this->db->query("UPDATE tb_product SET popularity=popularity+1 WHERE product_id=".$this->db->escape($this->uri->segment(2))."");
是否可以使用頁面緩存但是隻能運行此查詢的異常?
我喜歡使用CodeIgniters page caching。但我在控制器中有一個視圖計數器,如下所示:CodeIgniter頁面緩存異常
$this->db->query("UPDATE tb_product SET popularity=popularity+1 WHERE product_id=".$this->db->escape($this->uri->segment(2))."");
是否可以使用頁面緩存但是隻能運行此查詢的異常?
感謝您的回答,但我已經將計數器劃出來並寫了一個cronjob,它將通過Google Analytics(分析)通過GAPI獲取統計信息。
是的。你可以嘗試實現一個鉤子。這必須是'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);
}
}
我沒有嘗試這個自己,但它應該幫助你對你的方式。其中之一可能會奏效。祝你好運!