每当编辑器删除一个块(使用“内容区域”中的“删除”)以及用户在资产窗格中的某个块上单击“移动到垃圾箱”时,我都想触发一个事件。
我发现 DataFactory.Instance.MovedContent 事件,该事件在每次单击“移至垃圾箱”时都会触发
但是在“内容区域”上单击“删除”时,它不会触发。
更新:-
我正在执行这些步骤以实现点击删除
注册事件处理程序以保存页面事件和页面的已保存事件。
在保存事件中,获取正在保存的页面,并通过ContentArea.Items从内容区域获取块ID。使用contentlink.ID属性。
将这些ID存储在列表中,将其存储在内存中的某个位置,最好存储在httpcontext.items集合中,因为您只需要它用于请求,但短暂的缓存也可以。现在,您已经知道编辑器更改之前所有块的ID。
在已保存的事件中,获取新的ID列表,如上。现在,您知道编辑器更改后的ID。某些区块ID将丢失。通过您想做的任何事情来处理这些事情...
void Instance_SavingContent(object sender, ContentEventArgs e)
{
if (e.Content is ListPdfDocumentBlock)
{
var properties = e.Content.GetType().GetProperties().Where(i => i.PropertyType == typeof(ContentArea));
if (properties != null)
{
List<int> ids = new List<int>();
foreach (var property in properties)
{
ContentArea contentArea = property.GetValue(e.Content) as ContentArea;
if (contentArea != null)
{
foreach (ContentAreaItem contentAreaItem in contentArea.Items)
{
IContent itemContent = contentAreaItem.GetContent();
ids.Add(itemContent.ContentLink.ID);
}
}
}
HttpContext.Current.Items.Add("pdfId", ids);
}
}
}
但是此代码的问题是,它总是返回更新的ID。那么我将如何从旧到新进行比较,以找出要删除的块。
答案 0 :(得分:1)
从内容区域中删除内容时,项目引用只是从该内容区域中删除 。从内容区域中删除的实际内容(例如,块/媒体)实际上并没有被移动/删除(创建位置仍会存在,通常在某些资产文件夹中)。
因此,从内容区域中删除某些内容时,唯一发生的事情是更改了内容区域中包含的内容。删除的项目保持不变。
您可以挂起PublishingContent
事件,将发布的内容与当前发布的版本(如果有)进行比较,并比较其内容区域中的项目,以查看是否添加或删除了任何内容。