Silverstripe功能拦截

时间:2012-11-16 10:38:12

标签: content-management-system silverstripe

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

1 个答案:

答案 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作业会更直接。

相关问题