2012-10-09 37 views
2

我想让我的观点仅计算独特访客。Cakephp独特查看次数

在CakePHP 2.x中的我的项目控制器我有以下几点:

function view($slug = null) { 
    [...] 
    $this->Item->updateAll(
     array('Item.hits'=>'Item.hits+1'), 
     array('Item.slug'=>$slug) 
    ); 
} 

这增加了+1的撞柱和工作正常。 缺点是,多次点击视图会增加计数。

任何想法如何我可以做出独特的计数?

在此先感谢

回答

4

快速的解决方案

[...] 
if($this->Session->check('has_read_item.' . $slug) === false) { 
    $this->Item->updateAll(array('Item.hits'=>'Item.hits+1'),array('Item.slug'=>$slug)); 
    $this->Session->write('has_read_item.' . $slug, true); 
} 
[...] 

这为观看每个项目的唯一会话的基础上,塞。

如果会话尚不存在,用户还没有查看文章,所以增加命中并设置会话。

如果会话已经存在;不要再更新它。


这意味着,一个用户可以在不增加命中每件,不止一次在任何一次会议,这是约一样好,你会在几行代码搞定。

任何更准确的工作都需要付出很大的努力,而且很可能不值得。

+0

它正在工作,当我去掉第一行的“==虚假”。 非常感谢。你能否请你更新你的答案 – 3und80

+0

'Session :: check()'返回false,当会话不存在时,它应该在那里。如果会话不存在,我们想更新'hit',然后设置会话,防止它再次触发。 – Ross

0

CakePHP的计数器助手:CakePHP的助手来显示访客统计

http://www.phpclasses.org/package/7391-PHP-CakePHP-helper-to-display-visitor-statistics.html

这是CakePHP的计数器助手

当你下载的程序包手动安装,解压到任何地方。

  1. 首先,进入你的PHP MyAdmin - >你的数据库导入“init.sql”文件,为helper创建表。
  2. 将“model \ counter.php”复制到模型目录中。
  3. 将文件夹“counter”复制到“webroot/img /”=>这是图像文件。
  4. 将主文件“counter.php”复制到“app/view/helpers /”目录中。

全部完成。

使用方法请阅读example.php