1

我喜欢使用CodeIgniters 页面缓存。但是我在控制器中有一个视图计数器,例如:

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

是否可以使用页面缓存但只运行此查询例外?

4

2 回答 2

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 );
    }

}

我自己没有尝试过,但它应该可以帮助你。其中之一可能会起作用。祝你好运!

于 2013-02-16T11:20:55.193 回答
0

感谢您的回答,但我已经删除了计数器并编写了一个 cronjob,它将通过 GAPI 从 Google Analytics 获取统计信息。

于 2013-02-26T13:56:53.193 回答