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」フックである必要があります。フックからDB呼び出しを行うことができます。

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

}

私はこれを自分で試したわけではありませんが、途中で役立つはずです。これらの1つはおそらく機能します。幸運を!

于 2013-02-16T11:20:55.193 に答える
0

ご回答ありがとうございますが、私はカウンターを取り除き、GAPIを介してGoogleAnalyticsから統計を取得するcronジョブを作成しました。

于 2013-02-26T13:56:53.193 に答える