Блок на опубликованной странице имеет "Этот элемент нигде не используется." - PullRequest
2 голосов
/ 16 января 2020

У меня есть запланированное задание, которое перебирает все страницы определенного типа, создает блок для каждой страницы и помещает его в ContentArea.

if (productPageClone.GeneralContentArea == null)
                {
                    productPageClone.GeneralContentArea = new ContentArea();
                }

var newBlockForArea = _contentRepository.GetDefault<CrossLinkContainerBlock> 
(assetsFolderForPage.ContentLink, productPageClone.Language);
                        (newBlockForArea as IContent).Name = "newCrossLinkContainer";

var blockReference = _contentRepository.Save((newBlockForArea as IContent), SaveAction.Publish, 
AccessLevel.NoAccess);

var newItem = new ContentAreaItem();
newItem.ContentLink = blockReference;
productPageClone.GeneralContentArea.Items.Add(newItem);

Когда блок Создан, он опубликован.

Когда страница обновляется, она либо сохраняется, либо публикуется в зависимости от более раннего статуса.

_contentRepository.Save(productPageClone, SaveAction.ForceCurrentVersion | SaveAction.Publish, 
AccessLevel.NoAccess);`

Позже при проверке страницы блок находится в папке ресурсов страницы. и блок находится в правильной ContentArea, и он отображает правильно. Единственная проблема заключается в том, что когда я редактирую блок, он говорит: «Этот элемент нигде не используется».

Однако затем я переиздаю sh страницу, на которой находится блок, и затем отредактирую блок. говорит: «Изменения, внесенные здесь, затронут как минимум 1 элемент», как и должно быть.

Я использую Episerver 11.11.2.0

Я запускал запланированное задание вручную каждый раз, когда проверял это.

Кто-нибудь знает, почему это происходит?

Ответы [ 2 ]

2 голосов
/ 16 января 2020

Я нашел решение после прочтения этой страницы: https://gregwiechec.com/2015/10/reindexing-soft-links/

После того, как страница с новым блоком была опубликована, получите программные ссылки и переиндексируйте их:

var links = _contentSoftLinkIndexer.GetLinks(productPageClone);

_softLinkRepository.Save(productPageClone.ContentLink.ToReferenceWithoutVersion(), 
productPageClone.Language, links, false);

Softlink-инструменты импортируются так:

private IContentSoftLinkRepository _softLinkRepository = 
ServiceLocator.Current.GetInstance<IContentSoftLinkRepository>();

private ContentSoftLinkIndexer _contentSoftLinkIndexer = 
ServiceLocator.Current.GetInstance<ContentSoftLinkIndexer>();
1 голос
/ 16 января 2020

Это произойдет, если ваша область содержимого пуста

Попробуйте следующее

// Before adding the ContentAreaItem
if(productPageClone.GeneralContentArea == null) 
{
    productPageClone.GeneralContentArea = new ContentArea();
}

productPageClone.GeneralContentArea.Items.Add(newItem);
...