从页面上的内容区域中删除块时触发事件(使用“内容区域”上的“删除”),当用户单击“移至废纸篓”时

问题描述 投票:0回答:1

我想在编辑器删除块时触发一个事件(使用“内容区”上的“删除”),并且当用户在资产窗格中的块上单击“移动到废纸篓”时。

我发现DataFactory.Instance.MovedContent事件在每次点击“移动到垃圾箱”时触发

但是在点击内容区域上的删除时它不会触发。

更新: -

我正在做这些步骤来实现点击删除

  1. 注册事件处理程序以保存页面的事件和已保存事件。
  2. 在保存事件中,获取正在保存的页面,通过ContentArea.Items从内容区域获取块ID。使用contentlink.ID属性。
  3. 将这些ID存储在List中,将其存储在某个位置的内存中,最好是在httpcontext.items集合中,因为您只需要它来处理请求,但是短暂的缓存也可以工作。现在您知道编辑器更改之前所有块的ID。
  4. 在已保存的事件中,获取上述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。那么我将如何比较从旧到新的识别哪个块被删除。

episerver episerver-7 episerver-8 episerver-10
1个回答
1
投票

从内容区域中删除某些内容时,只需从该内容区域中删除该项目引用。从内容区域中删除的实际内容(例如块/媒体)实际上并未移动/删除(它仍然存在于创建它的位置,通常在某些资产文件夹中)。

因此,当从内容区域移除某些内容时发生的唯一事情是包含内容区域的内容被更改。删除的项目保持不变。

您可以连接PublishingContent事件并将发布的内容与当前发布的版本(如果有)进行比较,并比较其内容区域中的项目以查看是否添加或删除了任何内容。

© www.soinside.com 2019 - 2024. All rights reserved.