跳转到主要内容

跟踪标记为必读的内容项的用户查看

项目描述

在Plone中跟踪内容对象的读取。

特性

  • 将对象标记为必须阅读

  • 记录每个用户的内容对象首次读取记录

  • 查询特定用户是否已阅读特定内容对象

  • 按用户在特定时间窗口内的阅读次数列出前x个内容对象

兼容性

Plone 5.2和Plone 5.1用户应使用collective.mustread的2.x版本。Plone 5.0用户应使用collective.mustread的1.x版本。

限制

这不是一个安装后无需管理的Plone插件。

此产品默认情况下不跟踪阅读。它仅提供您可以用于此目的的后端。

此后端开发得到了Quaive的赞助。Quaive在其后端之上有自己的前端集成,以满足Quaive特定的用例。我们希望这个通用后端对其他Plone项目也有用。

理由

如果您想要一个简单的实现来跟踪阅读,您可以在每个内容对象上简单地创建一个存储用户ID列表的行为。

显然,这很快就会通过数据库写入来破坏您的网站。

因此,此后端设计为

  • 与异步调度兼容,即使它本身不提供异步。

  • 灵活,以支持多种策略场景,而无需重写或分叉整个后端。

  • 使用可插拔的SQL后端而不是ZODB,既为了卸载写入,也为了更容易运行报告查询。

架构

请原谅您认为下面的架构过于复杂。请参阅上面的理由。

不包括在collective.mustread中的是前端和异步部分

[ user browser ]  -> [ view ] -> [ async queue  ]

本包中的后端实现提供以下内容

[ @@mustread-hit ] -> [behavior] -> [database store]

让我们从数据库端开始叙述。

数据库

数据库存储提供了一个丰富的API,如collective.mustread.interfaces.ITracker中指定。

默认情况下,collective.mustread将写入内存中的sqlite数据库。数据将在zope-server重启时丢失。

要持久化您的数据,您可以使用sqlite-database-file。

  • 调用@@init-mustread-db视图(以创建位于BUILDOUT/var/mustread.db的sqlite数据库)

  • 或手动在注册表中设置数据库路径,然后调用该@@init-mustread-db视图(例如,与其他插件共享 - 见Auditlog兼容性

Auditlog兼容性

如果您在您的网站上运行collective.auditlog,您可能考虑使用相同的数据库(因此您只需要一个活动的数据库连接器)

SQL存储是从collective.auditlog实现派生出来的。我们设计collective.mustread以与collective.auditlog兼容,以至于如果可能,我们甚至会重用auditlog的数据库连接器。

数据库连接是通过注册记录collective.mustread.interfaces.IMustReadSettings配置的。您通常希望它包含与您的auditlog配置相同的值。

确保调用@@init-mustread-db以在数据库中创建此包所需的必要表/列。

行为

我们提供了两个行为

  • collective.mustread.maybe_must_read基本上只提供了一个复选框,您可以在其中指定内容对象是否为“必须阅读”。

  • collective.mustread.track_read_enabled激活了内容对象上的视图跟踪。我们跟踪视图,即使IMaybeMustRead没有将对象标记为“必须阅读”。我们这样做的原因是我们希望跟踪受欢迎的内容,即使项目不是强制性的。

通常,您会在您想要跟踪的内容类型上激活这两个行为。

这些行为默认不激活 - :default安装配置文件仅提供浏览器层和配置数据库连接器。选择并实施您自己的跟踪策略是您自己的项目的责任。

行为提供了一个灵活点,您可以在其中实现不同的跟踪策略。例如,您可以创建一个仅跟踪某些用户组读取行为的行为。您可以通过创建几行代码中的新行为,添加一些额外的业务逻辑来实现这一点,然后重用我们广泛的读取跟踪API来完成繁重的工作。

视图

对于所有ITrackReadEnabledMarker,即所有启用了collective.mustread.track_read_enabled行为的对象,都提供了一个辅助视图@@mustread-hit。点击该视图将在数据库中为内容对象存储一个读取记录。

在Quaive中,我们将从我们的异步堆栈中调用此视图。

您可以考虑提供一个新的小部件,它访问跟踪行为和API,而不是这个视图。但请注意,执行所有这些完整的同步操作是有风险的。YMMV。

还有一个特殊的调试视图@@mustread-hasread,它将告诉您,您登录的用户是否已经读取了您正在调用此视图的对象。

安装

通过将其添加到您的构建文件中安装collective.mustread

[buildout]

...

eggs =
    collective.mustread

然后运行bin/buildout

或使用内置的构建文件

virtualenv .
bin/pip install -r requirements.txt
bin/buildout bootstrap
bin/buildout

使用collective.mustread

在您的项目中实际使用collective.mustread所需的最小步骤

  1. 安装collective.mustread并配置数据库连接器。默认连接器是一个内存数据库,不适合生产环境。

  2. 通过GenericSetup在您想要跟踪的内容类型上激活collective.mustread.maybe_must_readcollective.mustread.track_read_enabled行为,或者自己编写自定义行为。

  3. 对于这些内容类型,在查看内容时点击${context/absolute_url}/@@mustread-hit。理想情况下,您将在这个阶段使用某种异步队列。

  4. 使用跟踪API查询数据库并根据您的业务逻辑调整自己的浏览器视图。获取跟踪器推荐的方法是

    from collective.mustread.interfaces import ITracker
    from zope.component import getUtility
    
    tracker = getUtility(ITracker)

贡献

支持

如果您遇到问题,请通过问题跟踪器让我们知道。

许可证

该项目采用GPLv2许可证。

贡献者

变更日志

2.2.1 (2023-06-06)

  • 删除过时代码。

2.2.0 (2022-10-04)

  • 使测试在Plone6上通过

2.1.0 (2022-08-05)

  • 在跟踪器中添加了一个新的get_most_read_query方法,以帮助集成商。Ref. #17 [ale-rt]

2.0.2 (2021-06-28)

  • 修复了一个过时警告[ale-rt]

2.0.1 (2021-05-20)

  • 当尝试获取用户无法查看的对象时,most_read方法不会中断。修复#14 [ale-rt]

2.0.0 (2020-01-27)

  • 在日志中指示数据库初始化结束[thet]

  • 支持Plone 5.2和Python2.7,Python 3.6和Python 3.7 [ale-rt, thet]

1.1.1 (2019-03-25)

  • 在添加必须阅读表列的升级步骤上不要中断 [ale-rt]

1.1.0 (2017-05-11)

  • 通过注册表允许指定引擎参数 [ale-rt]

  • 在ORM模型中删除不必要的列(site_name,title,info)[fRiSi]

  • 实现了为某些用户安排项目为必读的API。(有关使用方法,请参阅collective.contentrules.mustread)

    这需要新的数据库列。提供的升级步骤适用于sqlite数据库,但可能需要针对mysql或postgres进行更改。[fRiSi]

  • 允许通过使用@@init-mustread-db视图创建和配置数据库文件 [fRiSI]

1.0.1 (2016-12-28)

  • 数据库不可访问时提供详细的错误日志 [gyst]

  • 微小的测试更改 [gyst]

1.0 (2016-11-24)

  • 初始版本。 [gyst]

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

collective.mustread-2.2.1.tar.gz (36.4 kB 查看哈希值)

上传时间

构建分发

collective.mustread-2.2.1-py3-none-any.whl (34.8 kB 查看哈希值)

上传时间 Python 3

支持者