为用户提供通知。
项目描述
简介
此包允许您通知用户有关网站内容和动作的通知或动作请求。
安装
从GitHub下载此包,并将其解压缩到您的src目录中。在buildout中将“collective.notifications”添加到您的eggs和zcml slugs中。也将位置(src/collective.notifications)包含在开发slugs中。运行buildout
在“网站设置”->“插件”中激活通知。安装后,您将在“插件配置”下看到“通知”。这是您可以查看和管理网站通知的地方。这里还有一个链接,允许管理员发送通知。
发送通知
要从代码中发送通知,请使用NotificationRequestedEvent。在代码中需要的地方发送事件通知,使用类似的代码
from zope.event import notify from collective.notification.interfaces import NotificationRequestedEvent notify(NotificationRequestedEvent(context, note, recipients, user=user_id, url=action_url, external='email', email_body=email_body, email_subject=email_subject, email_content_type=content_type, first_read=False))
上下文是受影响的对象。note是包含要通知或需要执行的动作描述的纯文本字符串;recipients是所有将收到通知的用户ID的列表,它允许使用带有“group”前缀的组ID,例如[‘group:Reviewers’,‘group:Staff’,‘jsmith’,‘jdoe’]将通知发送给所有属于审稿人和工作人员组的用户,以及个人用户jsmith和jdoe。特殊组“Members”将通知所有门户用户。
最后七个参数是可选的:user可以是指与通知关联的用户ID。这只是在需要使用与当前登录用户不同的用户时使用,默认情况下是当前登录用户。url如果提供,将被用作站点操作,否则将使用上下文URL。external指的是外部通知服务(见下文)。目前,唯一包含的服务是‘email’。参数可以是一个列表,在这种情况下,将通过所有列出的服务发送通知。默认值为None,因此如果省略此参数,则不会发送外部通知。最后,如果first_read为True,则在一名用户阅读通知后,将通知标记为已读。这可以用于向一个可以采取行动但可以安全忽略通知的多人组发送通知。默认值为False。email_body是‘email’外部服务发送的电子邮件正文的文本。note将在email_body未设置时使用。email_body应该是html或纯文本。email_content_type应该是‘text/html’,如果email_body是html。
外部通知服务
Collective.notifications允许轻松与外部通知服务集成。使用IExternalNotificationService接口进行此操作。如果一个类实现了此接口并且它有一个send方法,则可以作为服务使用,并在发送通知时包含在external参数中。
示例
from zope.interface import implements from collective.notification.interfaces import IExternalNotificationService class TwitterNotifier(object): implements(IExternalNotificationService) def send(self, notification): # send the tweet ...
这需要在configure.zcml中将服务配置为utility
<utility provides="collective.notifications.interfaces.IExternalNotificationService" factory=".external.TwitterNotifier" name="twitter" />
异步和Celery
通知尝试使用plone.app.async来执行通知,但如果失败,它将直接完成任务。这种做法的优势是允许单个‘worker’客户端运行Async并处理所有这些请求。如果活动很多,它不会积压。Async将工作排队并按其能力处理,同时用户请求完成并继续,避免了性能损失。有关设置信息,请参阅collective.async pypi页面。Async不是通知工作的必需品,但是建议,特别是对于高流量站点。
注意
对于插入待处理通知的数量,使用z3c.jbot覆盖了plone.app.layout的“toolbar.pt”模板。如果您的项目对此模板有自己的修改,请记住这一点。