2

我试图让我的视图只计算唯一访问者。

在我的 Cakephp 2.x 项目控制器中,我有以下内容:

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

这将 +1 添加到命中列并且工作正常。缺陷是,多次单击视图会增加计数。

知道如何进行唯一计数吗?

提前致谢

4

2 回答 2

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);
}
[...]

这会根据 slug 为查看的每个项目设置一个唯一的会话。

如果会话不存在,说明用户还没有查看文章,所以增加点击然后设置会话。

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


这意味着一个用户不能在任何一个会话中增加每个项目的点击次数超过一次,这与您在几行代码中获得的效果差不多。

任何更准确的事情都需要付出很多努力,而且很可能不值得。

于 2012-10-09T11:51:39.760 回答
0

CakePHP Counter Helper:显示访问者统计信息的 CakePHP 助手

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

这是 CakePHP Counter Helper 的手动安装

下载包后,将其解压缩到任何地方。

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

全部做完。

用法请阅读example.php

于 2015-02-27T13:22:02.893 回答