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」フックである必要があります。フックから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つはおそらく機能します。幸運を!
ご回答ありがとうございますが、私はカウンターを取り除き、GAPIを介してGoogleAnalyticsから統計を取得するcronジョブを作成しました。