有人能告诉我如何编写一个可以拦截silverstripe上的发布命令的函数吗?我想实现一个系统,无论何时发生页面更改,都会发送对另一个系统的HTTP调用,这将通知管理员页面已被更改。我希望系统等待几分钟,如果没有授权,管理员有时间删除更改。
答案 0 :(得分: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作业会更直接。