我正在使用Umbraco 4.6.2,需要扩展它提供的默认通知。为了这个问题,我想说我正在尝试添加“取消发布”通知。
在\umbraco\presentation\umbraco\dialogs\notifications.aspx.cs
中,当从上下文菜单中打开“通知”对话框时,它会构建向用户显示的checkbx项目列表。
我看到每个Action
都有一个ShowInNotifier属性 - 如何为UnPublish操作将此值设置为true
?
这是否需要修改核心代码库,还是我可以优雅地扩展Umbraco?
所以在我添加了这个之后,用户可以订阅UnPublish通知(我在这里缺少任何步骤吗?)。 这会自动发送通知吗?
我猜不是,所以我接下来做的事情就是挂起UnPublish事件:
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);
}
}
}
所以那些不真实的代码/我需要一些指针:
这是检查用户是否订阅特定通知的正确方法吗?
如何使用默认的umbraco设置发送通知? (例如,像其他通知一样生成电子邮件)
如果那是不可能的,我必须建立自己的电子邮件:
如何从umbracoSettings.config中获取存储的电子邮件地址
如何复制默认Umbraco通知使用的格式?我应该手动复制它还是有更好的方法(以编程方式)。
感谢任何帮助(甚至只是相关示例的链接):&gt;
答案 0 :(得分:0)
我的同事得到了这个工作。
创建一个类,覆盖您希望通知的操作。
您可以在/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 char Letter
。设置此项以匹配要挂钩的事件。您可以在数据库中找到每个事件的字母。
将public bool ShowInNotifier
设置为true。
就是这样!
答案 1 :(得分:0)
我使用UmbracoSettings课程在Umbraco 4.7上工作:
umbraco.library.SendMail(umbraco.UmbracoSettings.NotificationEmailSender, newMember.Email, "email subject", "email body", false);