Cakephp独特的视图计数

时间:2012-10-09 11:21:30

标签: cakephp count cakephp-2.0 unique

我正在尝试让我的观点只计算唯一身份访问者。

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

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

这会为点击列添加+1并且正常工作。 缺点是,多次点击视图会增加计数。

知道如何才能做出独特的计数吗?

提前致谢

2 个答案:

答案 0 :(得分: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,为每个查看的项目设置一个唯一的会话。

如果会话尚不存在,则用户尚未查看该文章,因此请增加匹配,然后设置会话。

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


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

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

答案 1 :(得分: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 /”目录中。
  5. 全部完成。

    用法请阅读example.php