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。然后我将如何从旧到新进行比较以确定哪个块被删除。

4

1 回答 1

2

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

因此,当从内容区域中删除某些内容时,唯一发生的事情就是更改了包含内容区域的内容。删除的项目没有改变。

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

于 2019-02-13T07:35:12.847 回答