有谁能告诉我如何编写一个可以拦截 silverstripe 上的发布命令的函数?我想实现一个系统,每当页面更改即将发生时,就会发送对另一个系统的 HTTP 调用,这将通知管理员页面已更改。然后我希望系统等待几分钟,让管理员有时间在未经授权的情况下删除更改。
问问题
98 次
1 回答
1
类中有各种事件挂钩SiteTree
可用于此目的。
class MySiteTreeExtension extends DataExtension {
function onAfterPublish() {
$this->notifyMyAdmin(sprintf('Page "%s" has been published', $this->owner->Title));
}
}
将具有以下添加的扩展应用到您的mysite/_config.php
:
Object::add_extension('SiteTree', 'MySiteTreeExtension');
您显然需要实现notifyMyAdmin()
进行 HTTP 调用的方法。一般来说,我建议不要对用户操作进行同步 HTTP 调用,因为它们会使您的系统依赖于另一个系统的可用性。考虑使用类似messagequeue模块的东西。在“等待几分钟发布”方面:不可能通过扩展系统“否决”发布。为此,您可以在子类中进行覆盖SiteTree->doPublish()
,但对于用户而言,这仍然是一种奇怪的 UI 模式。工作流模块加上“请求发布”加上一些自动批准它们的 cron 作业会更直接。
于 2012-11-17T09:03:06.100 回答