Events Umbraco-如何添加自定义通知?

Events Umbraco-如何添加自定义通知?,events,notifications,umbraco,Events,Notifications,Umbraco,我正在使用Umbraco 4.6.2,需要扩展它提供的默认通知。对于这个问题,假设我正在尝试添加一个“未发布”通知 在\umbraco\presentation\umbraco\dialogs\notifications.aspx.cs中,当从上下文菜单打开“通知”对话框时,它构造了显示给用户的checkbx项目列表 我发现每个操作都有一个ShowInNotifier属性-如何为未发布的操作将此值设置为true? 这是否需要修改核心代码库,或者是否有一种很好的方法可以优雅地扩展Umbraco 因

我正在使用Umbraco 4.6.2,需要扩展它提供的默认通知。对于这个问题,假设我正在尝试添加一个“未发布”通知

\umbraco\presentation\umbraco\dialogs\notifications.aspx.cs
中,当从上下文菜单打开“通知”对话框时,它构造了显示给用户的checkbx项目列表

我发现每个
操作
都有一个ShowInNotifier属性-如何为未发布的操作将此值设置为
true
? 这是否需要修改核心代码库,或者是否有一种很好的方法可以优雅地扩展Umbraco

因此,在我添加了这个之后,用户可以订阅未发布通知(我是否遗漏了任何步骤?)。 这会自动发送通知吗

我猜不会,所以我接下来要做的就是钩住未发布的事件:

public class CustomEvents : ApplicationBase
{
    public CustomEvents()
    {
        Document.AfterUnPublish += new Document.UnPublishEventHandler(Document_AfterUnPublish);
    }

    void Document_AfterUnPublish(Document sender, umbraco.cms.businesslogic.UnPublishEventArgs e)
    {
        var user = User.GetCurrent();

        if (!string.IsNullOrEmpty(user.Email) && user.GetNotifications(sender.Path).Contains("UnPublish"))
        {
            //Send a notification here using default Umbraco settings, or, construct email and send manually:
            string umbracoNotificationSenderAddress = "";   //How to get the address stored in umbracoSettings.config -> <notifications> -> <email>

            //How to use the same subject/message formats used for other notifications? With the links back to the content?
            string subject = "Notification of UnPublish performed on " + MyUtilities.GetFriendlyName(sender.Id);
            string message = MyUtilities.GetFriendlyName(sender.Id) + " has just been unpublished.";

            umbraco.library.SendMail(umbracoNotificationSenderAddress, user.Email, subject, message, true);
        }
    }
}
公共类CustomEvents:ApplicationBase { 公共活动() { Document.AfterUnPublish+=新文档.UnPublishEventHandler(文档_AfterUnPublish); } 取消发布后作废文档(文档发送者,umbraco.cms.businesslogic.UnPublishEventArgs e) { var user=user.GetCurrent(); 如果(!string.IsNullOrEmpty(user.Email)和&user.GetNotifications(sender.Path).Contains(“取消发布”)) { //使用默认的Umbraco设置在此处发送通知,或构建电子邮件并手动发送: 字符串umbranotificationsenderAddress=“”;//如何获取存储在umbracoSettings.config中的地址->-> //如何使用与其他通知相同的主题/消息格式?以及返回内容的链接? string subject=“在”+MyUtilities.GetFriendlyName(sender.Id)上执行的取消发布通知”; 字符串message=MyUtilities.GetFriendlyName(sender.Id)+“刚刚取消发布。”; umbraco.library.SendMail(umbranotificationsenderAddress,user.Email,subject,message,true); } } } 因此,代码中不真实的部分/我需要一些指针:

  • 这是检查用户是否订阅了特定通知的正确方法吗

  • 如何使用默认的umbraco设置发送通知?(例如,像其他通知一样生成电子邮件)

如果不可能,我必须构建自己的电子邮件:

  • 如何从存储在umbracoSettings.config中的电子邮件地址获取

  • 如何复制默认Umbraco通知使用的格式?我应该手动复制它,还是有更好的方法(通过编程)来实现


任何帮助(甚至只是相关示例的链接)都将不胜感激:>

我的同事成功地完成了这项工作

创建一个类,该类重写您希望通知的操作。 您可以在
/umbraco/cms/actions

public class ActionUnPublishOverride : umbraco.BusinessLogic.Actions.ActionUnPublish, IAction
{
    ... see what the other actions look like to find out what to put in here!
在重写的类中,您将有一个
公共字符字母
。将其设置为与要挂接的事件相匹配。您可以在数据库中找到每个事件的字母

public bool ShowInNotifier
设置为true


就这样

我通过使用Umbraco设置类在Umbraco 4.7上实现了这一点:


是的,这只是让你发送电子邮件,但它不使用Umbraco系统通知。也就是说,它没有给用户一种“订阅”特定事件的方式。在我的问题中,我也已经有了这句话:)
umbraco.library.SendMail(umbraco.UmbracoSettings.NotificationEmailSender, newMember.Email, "email subject", "email body", false);