Инициировать событие, удаляя блок из области содержимого на странице (используя «Удалить» в области содержимого) и когда пользователь нажимает «Переместить в корзину». I - PullRequest
0 голосов
/ 12 февраля 2019

Я хочу вызвать событие всякий раз, когда редактор удаляет блок (используя «Удалить» в области содержимого) и когда пользователь нажимает «Переместить в корзину» в блоке на панели ресурсов.

Ifind DataFactory.Instance.MovedContent событие, которое срабатывает при каждом нажатии на кнопку «Переместить в корзину»

Но при нажатии кнопки «Удалить» в области содержимого оно не срабатывает.

Обновление: -

Я делаю эти шаги, чтобы добиться удаления

  1. Зарегистрировать обработчики событий для сохранения события и сохраненного события для страницы.

  2. В событии сохранения получите сохраняемую страницу, идентификаторы блоков из области содержимого с помощью ContentArea.Items.Используйте свойство contentlink.ID.

  3. Сохраняйте эти идентификаторы в списке, сохраняйте их где-нибудь в памяти, предпочтительно в коллекции httpcontext.items, так как она требуется только для запроса, но недолговечнакеш тоже работает.Теперь вы знаете идентификаторы всех блоков до их изменения редактором.

  4. В сохраненном событии получите новый список идентификаторов, как указано выше.Теперь вы знаете идентификаторы после смены редактора.Некоторые идентификаторы блоков будут отсутствовать.Обрабатывайте их так, как вам хочется ...

    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);
            }
        }
    }
    

Но проблема этого кода в том, что он всегда возвращает обновленные идентификаторы.тогда как я буду сравнивать от старого до нового, чтобы определить, какой блок удален.

1 Ответ

0 голосов
/ 13 февраля 2019

Когда вы удаляете что-либо из области содержимого, ссылка на элемент просто удаляется из этой области содержимого .Фактический контент (например, блок / медиа), удаленный из области контента, фактически не перемещается / удаляется (он все равно будет существовать там, где он был создан, обычно в какой-то папке ресурсов).

Итак, единственноеКогда что-то удаляется из области содержимого, происходит то, что содержимое , содержащее области содержимого, изменяется.Удаленный элемент не изменяется.

Вы можете подключить событие PublishingContent и сравнить публикуемый контент с текущей опубликованной версией (если есть) и сравнить элементы в его области контента, чтобы увидеть, было ли что-либо добавлено.или удалены.

...