EZ Publish/EZ Publish 通知功能
EZ Publish | EZ Publish安装与卸载 | EZ Publish的使用 | EZ Publish常见问题 | EZ Publish其他 |
通知功能的类型[ ]
eZ Publish 内建的通知系统可以在各种事件发生时通知用户。例如:当对象被更新或发布时,当工作流被执行时,等等。
有两种内建的通知类型:
• 子树通知
• 协作通知
- 子树通知
用户可以订阅关于一棵子树的通知。例如:如果在"Business"文件夹下有一组文章,用户可以对这个文件夹订阅子树通知。每次"Business"文件夹下有内容改动,系统都会给用户发送一封电子邮件。以改动会触发通知:
• 当一个新节点在子树中发布
• 当子树中现存内容被修改
用户可以选择对每个消息接收单独的邮件还是将多个消息合并为一封摘要邮件。
- 协作通知
eZ Publish 协作系统允许与其他用户共同工作,从而允许批准/拒绝其他人对内容的改动。例如:可以指定在“标准”分区内所做的改动必须经过批准才能被发布(这可以通过创建一个新的工作流,在工作流中创建一个“审批”事件,并用"content-publish-before"触发器来触发这个工作流来实现)。
如果某人(除了您和站点管理员)在“标准”分区内编辑了内容,系统会生成新的协作消息。例如:如果某人修改了文章"A“,系统会生成一个新的协作消息“文章A 等待审批”,并为编辑文章的用户生成一个新的协作消息“文章A 等待编辑的审批”。
要查看协作消息,在管理界面中选择“我的帐号”标签,然后选择左侧的“协作”。系统会显示协作界面,可以在这里查看/批准/拒绝改动。
每次当系统生成一条新的协作消息时,也会发送一封电子邮件。
- 处理通知
在eZ Publish 根目录中,有一个脚本"runcronjobs.php"。它负责处理工作流,通知和其它应该在后台运行的任务。如果要使用通知系统,"runcronjobs.php"必须被定时执行。最常用的方法是设置一个计划任务并每30-60 分钟执行一次。请参阅“配置cronjob ”和“运行cronjob ”条目了解更多。
"runcronjobs.php"会根据"cronjobs/notification.php“中的指令启动主通知处理脚本"kernel/classes/notification/eznotificationeventfilter.php”。
如果需要手动启动这个脚本,在管理界面中访问URL"notification/runfilter",并点击“运行通知过滤器”按钮(参阅下图)。
请注意,如果数据库中有大量的通知事件,处理通知可能会导致超时错误。由于这个原因,"notification"模块的"runfilter"视图只应用作测试和调试用途。
使用管理员界面[ ]
- 子树通知
订阅:可以通过上下文菜单或通知配置界面来简单地订阅某个对象的子树通知。
- 使用上下文菜单
要订阅子树通知,应该:
1. 登录管理界面。应该可以在左侧看到“内容结构”树,根节点默认被选中。下图揭示了系统如何显示选中的节点以及其子节点。
2. 从“内容结构”树或“子项目”中选择需要订阅的节点,点击它的图标并从上下文菜单中选择“添加到我的通知”,如下图所示。
3. 系统会添加一个新的子树通知并显示确认页面:
- 使用通知配置界面
可以通过将一个对象添加到通知配置界面底部的“我的通知项目”列表中来订阅这个对象的子树通知。以下文字揭示了具体步骤:
1. 在管理界面中点击“我的帐号”标签,然后选择左侧的“我的通知配置”连接。系统会显示以下的通知配置界面。
也可以通过"/notification/settings"访问这个界面。
2. 查看通知配置界面底端的“我的通知项目”列表。这里列出了所有已经订阅的通知项目。点击“添加项目”按钮来添加新的通知。
3. 系统会显示浏览界面,在这里可以选择需要的节点:
在列表中选择您希望订阅通知的对象节点。注意,可以同时选择多个节点。可以通过点击节点名称在列表中导航。如果需要的节点在“内容结构树”之外,可以不断点击上箭头图标直到到达树的根节点。例如,切换到“用户帐号”树并选择树中的用户组。
可以配置如何显示这个列表。例如,可以通过点击"10", "25", "50“这些链接来设置每页显示的项目数量。如果希望以缩略图的形式浏览图片对象,可以点击“缩略图”按钮。
4. 当完成对象的选择后(通过勾选复选框),点击“确定”按钮。系统会订阅这些对象的子树通知并把这些订阅添加到“我的通知项目”列表中。
- 配置摘要模式
如果希望以每天/每周/每月摘要的形式收取子树通知,参阅以下步骤启用摘要模式。
1. 在管理界面中通过"/notification/settings"或选择“我的帐号”-“我的通知配置”访问通知配置界面。
2. 摘要配置位于通知配置界面的顶端。默认情况下,摘要模式被禁用(如下图所示)。
要启用摘要模式,勾选“将所有消息合并为一篇摘要”复选框并选择摘要发送的频率。
• 每天一次,在特定时间(从0:00 到23:00)。
• 每周一次,每周特定日(从星期天到星期六)。
• 每月一次,每月特定日(从1号到31号)。
3. 点击“应用修改”按钮保存配置。
- 退订
如果不再希望接收关于某个对象的通知,参阅以下步骤退定订阅。
1. 在管理界面中通过"/notification/settings"或选择“我的帐号”-“我的通知配置”来访问通知配置界面。
2. 在界面底端的“我的通知项目”列表中,勾选希望退定的项目(如下图)。
3. 点击“删除所选”按钮。系统会从列表中删除所选项目,因而您不会再收到关于这个/这些对象的通知。
- 协作通知
如果通过协作系统与其他人一起工作,可能希望每次当一个协作消息被创建后,能收到一封通知邮件。以下步骤揭示了如何配置。
1. 在管理界面中通过"/notification/settings"或选择“我的帐号”-“我的通知配置”来访问通知配置界面。
2. 查看位于摘要配置下的“协作通知”章节。默认情况下,协作通知被禁用。如果希望接收协作通知,勾选“批准”复选框(参阅下图)。
3. 点击“应用修改”按钮保存配置。每次当一个协作消息被创建时,系统会给你发送一封通知邮件。
使用真实站点[ ]
子树通知功能只对那些已通过角色/策略授权访问“通知”模块的用户可用。请参阅“授权访问通知”了解更多关于访问权限的知识。协作通知只在管理界面中可用。
- 订阅子树通知
用户可以通过点击正在查看的项目的“通知我”按钮来订阅这个对象的子树通知。下图某个站点的论坛。
点击这个按钮后,系统添加子树通知并显示如下确认页面:
在标准站点中,“通知我”按钮总是在论坛页面中显示,但是其它页面中没有这个按钮。论坛由以下模板控制:
• design/your_siteaccess/override/templates/full/forum.tpl
• design/your_siteaccess/override/templates/full/forum_topic.tpl
请参阅“添加(通知我)按钮”了解更多关于为其它模板添加通知我按钮的信息。
- 配置摘要模式
无论使用何种站点入口/界面(只要您有权限),就可以访问通知配置。可以用以下方式访问这个配置界面:
1. 登录系统后,访问"/notification/settings"(例如:http://www.example.com/notification/settings)。应该可以看到摘要配置和“通知”列表(如下图)。
2. 默认情况下,摘要模式被禁用。要启用摘要模式,勾选“将所有消息合并为一篇摘要”复选框,然后选择摘要发送频率。
• 每天一次,某个时间(从0:00 到23:00)
• 每周一次,每周的某天(从星期天到星期六)
• 每月一次,每月的某天(从1 号到31 号)
3. 点击“保存”按钮保存配置。(如果希望放弃修改,点击“取消”按钮。)
- 退定
如果不想再收到关于某个对象的子树订阅,参阅如下步骤:
1. 通过"/notification/settings"(例如:http://www.example.com/notification/settings)访问通知配置界面。
2. 界面中摘要配置下的“通知”列表包含了您的所有订阅(参阅上图)。勾选希望退定的项目。
3. 点击“删除”按钮。系统会从列表中删除所选的订阅。
注意,可以通过复制standard 或admin 界面中的默认模板来重设通知配置模板以配合站点需求。
添加“通知我”按钮[ ]
用户可以通过使用“通知我”按钮来订阅当前浏览页面的子树通知。大部分默认模板不包含这个按钮。只有论坛中的以下模板包含这个按钮:
• design/your_siteaccess/override/templates/full/forum.tpl
• design/your_siteaccess/override/templates/full/forum_topic.tpl
在前面的例子中,如果您在"Business"文件夹中有一组文章,如果文件夹的模板中没有“通知我”按钮,用户将无法订阅这个文件夹的子树通知。请注意用户必须登录才能使用这个特性。
可以通过在模板中添加以下代码来添加“通知我”按钮。例如,可以把代码添加到"design/your_siteaccess/override/templates/full/folder.tpl":
<form method="post" action={'/content/action'|ezurl}> <input type="hidden" name="ContentNodeID" value="{$node.node_id}" /> <input type="submit" name="ActionAddToNotification" value="Keep me updated" /> </form>
清除缓存后,每次用户访问文件夹时,“通知我”按钮都会显示。同样的修改也可以应用于文章和其它对象的模板。
请注意,某些默认模板可能已经包含一个指向"/content/action"的表单,在这种情况下,确保所有上面代码中的变量在这个表单中。也可以在一个模板中使用多个提交到"content/action"的表单。
如果希望在pagelayout 中使用“通知我”按钮,需要使用不同的代码。这样做的原因在于,$node变量在pagelayout 中不可用。
{* Check if we have a node... *} {if $module_result.node_id} <form method="post" action={'/content/action'|ezurl}> <input type="hidden" name="ContentNodeID" value="{$module_result.node_id}" /> <input type="submit" name="ActionAddToNotification" value="Keep me updated" /> </form> {/if}
定制电子邮件[ ]
可以通过修改模板来定制通知电子邮件。例如,"design/standard/templates/notification/handler/ezgeneraldigest/view/plain.tpl"是主要的通知模板。它控制 通知邮件如何被生成。
如果需要修改这个模板,应该把这个模板复制到自定义界面并修改它。例如,可以复制它并添加一些在邮件中显示的附加的/静态的文本。记住在调试修改之前需要清除缓存。注意,应该复制默认模板到界面中,而不能直接修改默认模板。
授权访问提醒[ ]
内建的权限系统可以控制用户是否允许使用通知。以下文字揭示了如何检查和指派必要的权限。
- 检查访问权限
以下文字揭示了如何查看一个用户或用户组并检查他们是否允许访问"notification"模块。
1. 登录到管理界面并点击“用户帐号”标签。您可以在页面左侧看到用户和用户组。
2. 在左侧的节点树或子项目窗口中选择要查看的用户或用户组。
上图中,"Editors"用户组被选中。可以通过点击页面上面的菜单启用“角色与权限”窗口来显示指派给当前用户组的角色与策略。
3. 查看策略表中的“模块”列。如果"notification"模块没有在此列出,则选中的用户/用户组不允许使用通知。请参阅下一章了解如何创建新的角色(授权访问这个模块)并指派到用户/用户组。
- 创建一个新角色
以下文字揭示了如何创建一个新的角色并授权访问通知。
1. 在管理界面中点击“用户帐号”标签,然后访问左侧的“角色与策略”链接。系统会显示现存的角色,如下图所示。
2. 假设要创建一个新的角色“我的通知角色”。点击角色列表下的“新建角色”按钮。系统会显示角色编辑界面,如下图。
3. 输入角色名称然后点击“新建策略”按钮。
4. 设置向导会引导用两个步骤创建新的策略。
上图演示了第一步。从下拉框中选择"notification"模块,然后点击“授权访问一个函数”按钮。
5. 系统会显示第二步,如下图。
从下拉框中选择"use"函数。注意,不应该选择"administrate"函数,因为它会授权访问"notification"模块的"runfilter"视图。
6. 点击“授权访问所有”按钮。(此处点击“授权限制访问”没有任何意义,因为"notification"模块不支持授权限制。)
7. 新的策略会在角色编辑界面显示,如下图。
8. 点击“确定”按钮保存修改并返回角色查看界面。
新策略会在角色查看界面显示(如上图)。现在可以把这个角色指派给任何用户或用户组(这会在下一章节做详细解释)。
当查看一个角色时,页面底端应该有一个用户/用户组的列表。这个列表揭示了当前角色指派的用户和用户组。以下文字揭示了如何用这个列表把当前角色指派到"Editors"用户组。
1. 点击角色查看试图中用户列表下的“指派”按钮。
2. 选择下图中的"Editors"用户组并点击“确定”按钮。
3. "Editors"用户组会在用户列表中显示。下图显示了“我的通知角色”的角色查看视图,这个角色被指派给了"Editors"用户组(这意味着这个组中的所有用户都可以使用通知)。
注意,也可以用相同的方法把角色指派给单独的用户。
通知事件[ ]
默认情况下,系统支持以下三种通知事件:
• Publish
• Collaboration
• Current time
- Publish
每次当对象被发布时,一个新的"ezpublish"事件会被创建。
- Collaboration
每次当一个协作(collaboration)消息被生成时,一个新的"ezcollaboration"事件会被创建。
- Current time
每次当"runcronjobs.php"脚本被执行,一个新的"ezcurrenttime"事件会被创建。这种行为可以在"cronjobs/notification.php"中指定。系统使用"ezcurrenttime"事件来生成摘要通知。
如果需要手动生成这个事件,可以在管理界面中访问"notification/runfilter",然后点击“生成时间事件”按钮。注意,"notification"模块的"runfilter"视图只应用于测试或调试的目的。
内建的通知事件类型保存在"kernel/classes/notification/event/"目录。也可以为了特定的需求开发自定义的通知事件。
- 创建和存储
假设站点中有一篇文章,并且一个用户已经订阅了这篇文章的子树通知。每次当这篇文章的一篇评论被发布或文章被更新,系统都会生成一个新的"ezpublish"时间并把它存储在数据库中。这个事件可以被0个,一个或多个通知处理器处理。
- 配置
可用的通知事件类型是在"notificatin.ini"重设文件中的"[NotificationEventTypeSettings]"章节中配置的。以下的配置可以用于这个章节:
"RepositoryDirectories[]"数组指定eZ Publish 会在哪些目录中搜索内建的通知事件类型。事件的确切位置由"AvailableNotificationEventTypes"指定。
"ExtensionDirectories[]"数组指定eZ Publish 会在哪些扩展目录中搜索附加的通知事件类型。默认情况下,eZ Publish 会在扩展中的"notificationtypes"子目录中搜索。事件在这个子目录中的确切位置由"AvailableNotificationEventTypes"指定。
"AvailableNotificationEventTypes[]"数组包含一组事件类型。
例1 以下内容可以在"notification.ini"重设文件中指定:
[NotificationEventTypeSettings] RepositoryDirectories[]=kernel/classes/notification/event/ ExtensionDirectories[] AvailableNotificationEventTypes[]=ezpublish AvailableNotificationEventTypes[]=ezcurrenttime AvailableNotificationEventTypes[]=ezcollaboration
以上配置会要求eZ Publish 在以下文件中搜索内建的通知事件:
• kernel/classes/notification/event/ezpublish/ezpublishtype.php
• kernel/classes/notification/event/ezcurrenttime/ezcurrenttimetype.php
• kernel/classes/notification/event/ezcollaboration/ezcollaborationtype.php
例2 可以通过开发自定义的通知时间来扩展系统。例如,如果有一个扩展"nExt",它包含一个通知事件"nev",把以下内容添加到"notification.ini"重设文件中:
[NotificationEventTypeSettings] ExtensionDirectories[]=nExt AvailableNotificationEventTypes[]=nev
或
[NotificationEventTypeSettings] RepositoryDirectories[]=extension/nExt/notificationtypes/ AvailableNotificationEventTypes[]=nev
这些配置会要求eZ Publish 假定附加的通知事件定义在"extension/nExt/notification/nev/nevtype.php"中。请注意,必须至少清除ini 缓存来要求系统重新读取修改过的配置文件。
通知处理器[ ]
默认情况下,系统中有以下几种处理通知事件的处理器:
• 子树通知
• 一般摘要
• 协作通知
- 子树通知
"ezsubtree"通知处理器处理"ezpublish"事件。
- 一般摘要
"ezgeneraldigest"通知处理器处理"ezcurrenttime"事件。
- 协作通知
"ezcollaborationnotification"通知处理器处理"ezcollaboration"事件。内建的通知处理器保存在"kernel/classes/notification/handler"目录中。可以为了特定的需求开发自定义的处理器。
- 处理通知事件
任何时候,当"eznotificationeventfilter.php"被执行时,系统会尝试用每个可用的通知处理器来运行每个未处理的通知事件。
请注意,处理一个事件可能会发送/生成多个通知。例如,如果一篇文章的新版本被发布,所有订阅的用户都会被通知。
如果每个通知都被成功发送,事件会被系统从数据库中删除。或者,如果某些生成的通知必须被推迟来生成每天/每周/每月的摘要,系统会在用户的通知集中添加新的通知项目。一个通知项目包含通知事件的数据,它的处理器,订阅者的电子邮件和发送通知的事件。
摘要处理器通过访问通知项目集合来处理"ezcurrenttime"事件。在"ezcurrenttime"事件中指定的时间会被用来与每个通知项目的时间比较,从而确定哪些项目必须被处理。只要每个通知项目包含关于通知事件和它的处理器的数据,系统就会用正确的处理器来处理它。结果通知会被合并为摘要信息并发送给订阅者。
如果通知项目被成功处理,系统会将这个项目从项目集中删除。如果没有剩余的通知项目引用当前事件,这个事件会被系统从数据库中删除。
当处理结束后,"ezcurrenttime"事件会被系统从数据库中删除。注意,用摘要处理器处理"ezcurrenttime"事件并不总是以发送/生成摘要通知告终(例如,如果没有任何订阅者启用了摘要模式)。
- 配置
"notification.ini"重设文件中的"[NotificationHandlerSettings]"定义了用于处理通知事件的处理器。在这个章节下,可以使用以下配置。
"RepositoryDirectories[]"数组告知eZ Publish 在哪些目录中搜索内建的通知处理器。确切的处理器位置由"AvailableNotificationEventTypes"配置。
"ExtensionDirectories[]"数组告知eZ Publish 应该在哪些extension 目录中搜索附加的处理器。默认情况下,eZ Publish 会在您的extension 中的"notification/handler"子目录中搜索。确切的处理器位置由"AvailableNotificationEventTypes"配置。
"AvailableNotificationEventTypes[]"数组包含了一组处理器。
例1
以下配置可以在"notification.ini"的重设文件中指定:
[NotificationEventHandlerSettings] RepositoryDirectories[]=kernel/classes/notification/handler/ ExtensionDirectories[] AvailableNotificationEventTypes[]=ezgeneraldigest AvailableNotificationEventTypes[]=ezcollaborationnotification AvailableNotificationEventTypes[]=ezsubtree
这些配置会要求eZ Publish 在以下文件中搜索通知处理器。
• kernel/classes/notification/handler/ezgeneraldigest/ezgeneraldigesthandler.php
• kernel/classes/notification/handler/ezcollaborationnotification/ezcollaborationnotificationhandler.php
• kernel/classes/notification/handler/ezsubtree/ezsubtreehandler.php
例2
可以通过创建自定义的通知处理器来扩展系统。例如,如果有一个扩展"nExt",它包含一个通知处理器"nh",把以下内容添加到"notification.ini"重设文件:
[NotificationEventHandlerSettings] ExtensionDirectories[]=nExt AvailableNotificationEventTypes[]=nh
或者
[NotificationEventHandlerSettings] RepositoryDirectories[]=extension/nExt/notification/handler/ AvailableNotificationEventTypes[]=nh
这些配置会要求eZ Publish 在"extension/nExt/notification/handler/nh/nhhandler.php"中搜索通知处理器。