我喜欢使用CodeIgniters 页面缓存。但是我在控制器中有一个视图计数器,例如:
$this->db->query("UPDATE tb_product SET popularity=popularity+1 WHERE product_id=".$this->db->escape($this->uri->segment(2))."");
是否可以使用页面缓存但只运行此查询例外?
我喜欢使用CodeIgniters 页面缓存。但是我在控制器中有一个视图计数器,例如:
$this->db->query("UPDATE tb_product SET popularity=popularity+1 WHERE product_id=".$this->db->escape($this->uri->segment(2))."");
是否可以使用页面缓存但只运行此查询例外?
是的。你可以尝试实现一个钩子。这必须是“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 );
}
}
我自己没有尝试过,但它应该可以帮助你。其中之一可能会起作用。祝你好运!
感谢您的回答,但我已经删除了计数器并编写了一个 cronjob,它将通过 GAPI 从 Google Analytics 获取统计信息。