EPiserver: ICurrentPage не имеет определения для ContentLink - PullRequest
0 голосов
/ 02 апреля 2019

Наши редакторы в EPiserver хотели бы иметь возможность изменять ссылки hreflang каждой страницы по мере необходимости.Поэтому я хотел бы изменить наши страницы и включить переопределение функции hreflang по умолчанию в episerver.

Я начал с того, что попытался написать свой собственный htmlhelper, который соберет для меня hreflang, чтобы я мог его изменить.позже.

В файле HtmlHelpers.cs я начал со следующего:

public static IHtmlString HrefLangLinks()
{
    var pageLanguagesBranches = ContentRepository.GetLanguageBranches<PageData>(ICurrentPage.ContentLink).ToList();
    var availablePageLanguages = FilterForVisitor.Filter(pageLanguagesBranches).OfType<PageData>();

    // Dictionary<String, String>
    return null;
}

Visual Studio сообщает мне, что ICurrentPage не имеет определения для ContentLink.

Буду признателен за любую помощь, поскольку я не очень знаком с EPiserver.

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

Было предложено следующее:

public static IHtmlString HrefLangLinks(this BasePage currentPage)
        {
            var pageLanguagesBranches = ContentRepository.GetLanguageBranches<PageData>(currentPage.ContentLink).ToList();
            var availablePageLanguages = FilterForVisitor.Filter(pageLanguagesBranches).OfType<PageData>();

            // Dictionary<String, String>
            return null;
        }

Вместо BasePage У нас есть StandardPage, который наследуется от SitePageData, который наследуется от PageData.Я попробовал все три, но это не сработало, Visual Studio подчеркивает этот раздел ContentRepository.GetLanguageBranches<PageData> следующим сообщением:

Неподдерживаемый внутренний API ....

Ссылка на объекттребуется для нестатического поля, метода или свойства ContentRepository.GetLanguageBranches<PageData>(ContentReference)

Ответы [ 2 ]

0 голосов
/ 03 апреля 2019

Похоже, вы пытаетесь вызвать метод GetLanguageBranches без предварительного получения экземпляра IContentRepository. Вы можете внедрить IContentRepository в класс статического расширения следующим образом:

private static readonly Injected<IContentRepository> _contentRepository = default(Injected<IContentRepository>);

Затем перепишите в строке 3 вашего обновления что-то вроде этого:

var pageLanguagesBranches = _contentRepository.Service.GetLanguageBranches<PageData>(currentPage.ContentLink).ToList();
0 голосов
/ 02 апреля 2019

Если у вас есть концепция базовой страницы (которую вы должны), от которой наследуются все ваши страницы, вы можете попробовать следующее:

 public static IHtmlString HrefLangLinks(this BasePage currentPage)
    {
        IContentRepository repo = ServiceLocator.Current.GetInstance<IContentRepository>();
        var pageLanguagesBranches = repo.GetLanguageBranches<PageData>(currentPage.ContentLink).ToList();
        var availablePageLanguages = FilterForVisitor.Filter(pageLanguagesBranches).OfType<PageData>();

        // Dictionary<String, String>
        return null;
    }
...