我们的EPiserver中的编辑人员希望能够根据需要修改每个页面的hreflang链接。因此,我想修改我们的页面并启用Episerver中默认hreflang功能的覆盖。
我首先尝试编写自己的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)
答案 0 :(得分:0)
如果您有一个继承自所有页面的BasePage的概念,则可以尝试以下操作:
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;
}
答案 1 :(得分:0)
似乎您正在尝试调用GetLanguageBranches方法,而没有先获取IContentRepository的实例。 您可以像这样将IContentRepository注入到静态扩展类中:
private static readonly Injected<IContentRepository> _contentRepository = default(Injected<IContentRepository>);
然后将更新的第3行重写为如下内容:
var pageLanguagesBranches = _contentRepository.Service.GetLanguageBranches<PageData>(currentPage.ContentLink).ToList();