Plone的活动流。
项目描述
ftw.activity
ftw.activity 为Plone提供了一个包含活动流的视图。
工作原理
活动通过事件处理程序存储到自定义的 souper 目录中。然后活动视图使用活动渲染器递归地渲染每个上下文的活动。
支持的事件
默认事件处理程序适用于 Archetypes 和 Dexterity 对象。
对象添加
对象更改
对象删除
对象复制
对象移动
工作流转换
用法
将 ftw.activity 作为依赖项添加到您的包(setup.py)或构建配置中
[instance] eggs += ftw.activity
在Plone的插件控制面板中安装通用导入配置文件。
安装包后,将没有到视图的链接。视图可在任何上下文中作为 /activity 使用,因此您可能希望将其放在任何需要的位置或添加操作。
ftw.activity 还注册了一个名为 tabbedview_view-activity 的 ftw.tabbedview 选项卡。
自定义活动
自定义活动可以轻松地在 souper 目录中注册,并自动渲染
from ftw.activity.catalog import ActivityRecord
from ftw.activity.catalog import get_activity_soup
record = ActivityRecord(context, 'downloaded')
get_activity_soup().add(record)
活动渲染器
默认活动渲染器使用链接到对象(除非已删除)、事件和行动者渲染活动。
但是,如果您想更改活动渲染方式,您可以使用自定义渲染器轻松地做到这一点。活动渲染器是一个命名多适配器。
请注意,渲染器适应的是活动视图渲染的上下文,而不是活动发生的对象。原因在于该对象可能已不存在。
渲染器必须实现三个方法,position、match和render。由于可能存在多个可以渲染活动的适配器,因此使用position来决定哪个渲染器先执行。使用match方法来询问渲染器是否希望渲染某个活动。如果活动匹配,则使用render方法进行渲染。
警告 请注意,当对象被删除时,传递给match和render的对象可能是None。
示例 ZCML 注册
<adapter factory=".activity.CustomActivityRenderer" name="my.package-renderer" />
实现适配器(activity.py)
from ftw.activity.interfaces import IActivityRenderer
from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
from zope.component import adapts
from zope.interface import implements
from zope.interface import Interface
class CustomActivityRenderer(object):
implements(IActivityRenderer)
adapts(Interface, Interface, Interface)
index = ViewPageTemplateFile('templates/activity_renderer.pt')
def __init__(self, context, request, view):
self.context = context
self.request = request
self.view = view
self.items = []
def position(self):
# The position of the default renderer is 1000
return 500
def match(self, activity, obj):
return activity.attrs['portal_type'] == 'MyType'
def render(self, activity, obj):
return self.index(activity=activity, obj=obj)
在模板(templates/activity_renderer.pt)中,您可能想使用默认的活动宏并扩展它
<metal:wrapper use-macro="context/@@activity_macros/macros/event">
<metal:CONTENT fill-slot="body-content"
tal:define="activity nocall:activity|nocall:options/activity">
<div tal:attributes="class string:activity-icon-{$activity/action}"></div>
</metal:CONTENT>
</metal:wrapper>
在活动中存储额外的信息
通过事件处理器可以轻松扩展存储在活动记录上的元数据
<subscriber
for="ftw.activity.interfaces.IActivityCreatedEvent"
handler=".subscribers.enhance_activity_record"
/>
def enhance_activity_record(event):
record = event.activity
obj = event.object
record.attrs['creator'] = obj.Creator()
活动过滤器
可能存在各种自定义用例,这些用例需要在渲染活动视图时丢弃活动。例如,系统活动是为了内部目的而记录的,不应出现在活动流中。
可以通过注册一个IActivityFilter适配器轻松过滤活动
<adapter factory=".activity.CustomActivityFilter" name="my.package-filter" />
from ftw.activity.interfaces import IActivityFilter
from zope.component import adapts
from zope.interface import implements
from zope.interface import Interface
class CustomActivityFilter(object):
implements(IActivityFilter)
adapts(Interface, Interface, Interface)
def __init__(self, context, request, view):
self.context = context
self.request = request
self.view = view
def position(self):
return 500
def process(self, activities):
for activity in activities:
if activity.attrs['action'] == 'custom-action':
continue
yield activity
存在一个默认的FilterCloseChanges过滤器,它移除发生在同一对象上的连续“更改”活动,这些活动之间的时间间隔小于1分钟。当用户在短时间内大量编辑同一对象时(例如使用外部编辑器),这会从活动流中移除噪音。
本地活动视图
@@local-activity视图在任何上下文中都可用,并且仅显示当前上下文的活动,而不显示其子上下文的活动。
有关使用 ftw.testing.freeze 进行 Plone 5.1 测试的提示
由于某种原因,在使用 freeze(contextmanager)之前需要执行 transaction.commit()。有关详细信息,请参阅https://github.com/plone/plone.restapi/pull/747我认为这是一个类似的问题,也许在使用 freeze contextmanager 之前执行 transaction.commit() 可以意外地绕过问题。
链接
版权
本软件包的版权属于4teamwork。
ftw.activity是在GNU通用公共许可证(GPL)第2版下许可的。
变更日志
2.5.2 (2021-02-26)
在活动视图中显示 plone 工具栏 [Nachtalb]
2.5.1 (2019-12-14)
提供预编译的捆绑包。 [tinagerber]
2.5.0 (2019-11-11)
升级到 ftw.theming(也修复了 plone 5 中缺少的 css)[Nachtalb]
2.4.0 (2019-10-29)
支持 Plone 5.1 [mathias.leimgruber]
忽略移动 plone 站点时触发的事件 [raphael-s]
2.3.2 (2017-07-03)
调整 readme 中的图像大小以修复其在 pypi 上的大小问题 [raphael-s]
忽略没有 UIDs 的对象的触发事件,以避免错误。 [raphael-s]
2.3.1 (2017-06-19)
为 node.ext.zodb <= 1.0.1 添加版本约束以避免拉取 ZODB 5。 [lgraf]
2.3.0 (2016-11-23)
存储添加/删除 p.a.discussion 评论的活动。 [jone]
2.2.2 (2016-11-15)
修复检测最后事件(更多按钮)中的错误 [jone]
2.2.1 (2016-11-15)
当没有更多事件时隐藏“更多”按钮 [jone]
当没有事件时隐藏“更多”按钮 [jone]
2.2.0 (2016-06-01)
通过存储时间戳优化日期索引的性能 [jone]
2.1.0 (2016-03-21)
修复在太早索引对象时与 collective.geo 相关的 bug [jone]
修复了在Plone站点中移动对象时出现的错误。[mbaechtold]
修复了在tabbedview标签页中抓取的问题。[jone]
添加了活动面板。[elioschmutz]
2.0.0 (2015-09-30)
实现了基于souper的定制目录,用于单独记录所有活动。这允许我们跟踪删除活动。渲染已完全改变:必须将自定义表示重写为新的渲染适配器。[jone]
移除了对集合的支持。因为活动流将不再基于目录。[jone]
1.1.5 (2015-05-18)
修复了在抓取更多事件时出现的diazo错误。[jone]
禁用ajax响应的diazo主题。[jone]
1.1.4 (2015-03-25)
修复了过宽图片的宽度。[Kevin Bieri]
1.1.3 (2014-11-18)
修复了一个错误,当修改用户不再可用时,活动视图会崩溃。[mbaechtold]
1.1.2 (2014-09-24)
忽略活动视图中的注释。修复了在添加注释时活动视图崩溃的错误。[jone]
1.1.1 (2014-09-24)
空的棕色纸袋发布。
1.1.0 (2014-09-04)
添加了对集合的支持。[jone]
1.0.0 (2014-09-03)
初始实现。
项目详情
ftw.activity-2.5.2.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | cc093732c112f63629a8d01db29b025df2267e934cd5b0321c49630a71e4e4b5 |
|
MD5 | cde666e5225b0602c4f228566bc4ca30 |
|
BLAKE2b-256 | 960a2ef9dc71087ed231a2cbdd13203415b1a2d4a0bd0562ca0d040aabc45e99 |