Sitecore 为不同站点映射两个模板
我们正在开发一个多站点sitecore解决方案,其中每个站点都可以有自己的新闻,也可以显示来自其他站点的合并新闻 问题: 每个网站都有其独特的新闻要求,其中90%的模板字段匹配,但其余10%不同 例如,Site-A具有带有作者下拉列表的新闻模板,其中作者列表是在配置节点上编写的。其中as Site-B有新闻模板,其中Author是一个自由文本字段 所以,当Glass Mapper自动尝试映射“作者”字段时,对于自由文本字段,它将失败 解决方案: 这可以通过在所有网站上创建“作者”下拉列表来解决,但产品所有者不希望这样 另一种解决方案是从两个来源手动映射新闻字段,或者使用AUTOMAP等 理想的解决方案: Glassmapper动态自动解析并填充作者文本字段或下拉字段 有可能吗 谢谢。我会通过“流畅配置”来解决这个问题。 结合最近添加到Glass Mapper的新代理功能。 代理功能最初在此处介绍和描述: 代理功能的Nuget包:我将通过“流畅配置”来解决这个问题。 结合最近添加到Glass Mapper的新代理功能。 代理功能最初在此处介绍和描述: 代理功能的Nuget包:我将通过“流畅配置”来解决这个问题。 结合最近添加到Glass Mapper的新代理功能。 代理功能最初在此处介绍和描述: 代理功能的Nuget包:我将通过“流畅配置”来解决这个问题。 结合最近添加到Glass Mapper的新代理功能。 代理功能最初在此处介绍和描述:Sitecore 为不同站点映射两个模板,sitecore,automapper,sitecore7,sitecore7.2,glass-mapper,Sitecore,Automapper,Sitecore7,Sitecore7.2,Glass Mapper,我们正在开发一个多站点sitecore解决方案,其中每个站点都可以有自己的新闻,也可以显示来自其他站点的合并新闻 问题: 每个网站都有其独特的新闻要求,其中90%的模板字段匹配,但其余10%不同 例如,Site-A具有带有作者下拉列表的新闻模板,其中作者列表是在配置节点上编写的。其中as Site-B有新闻模板,其中Author是一个自由文本字段 所以,当Glass Mapper自动尝试映射“作者”字段时,对于自由文本字段,它将失败 解决方案: 这可以通过在所有网站上创建“作者”下拉列表来解决,
代理功能的Nuget包:您可以使用以下推断类型:
公共接口IBaseNews
{
字符串作者{get;set;}
//在下面列出所有其他共享字段
}
[SitecoreType(TemplateId=“…”,AutoMap=true)]
公共类新闻站点A:IBaseNews
{
[SitecoreField]
公共字符串作者{get;set;}
//列出SiteA唯一的所有字段
}
[SitecoreType(TemplateId=“…”,AutoMap=true)]
公共类新闻站点B:IBaseNews
{
[SitecoreField]
公共字符串作者{get;set;}
//列出SiteB唯一的所有字段
}
现在,您的代码应该是:
IBaseNews-newclass=NewsItem.GlassCast(true,true);
//现在可以使用Author属性
您可以按如下方式使用推断类型:
公共接口IBaseNews
{
字符串作者{get;set;}
//在下面列出所有其他共享字段
}
[SitecoreType(TemplateId=“…”,AutoMap=true)]
公共类新闻站点A:IBaseNews
{
[SitecoreField]
公共字符串作者{get;set;}
//列出SiteA唯一的所有字段
}
[SitecoreType(TemplateId=“…”,AutoMap=true)]
公共类新闻站点B:IBaseNews
{
[SitecoreField]
公共字符串作者{get;set;}
//列出SiteB唯一的所有字段
}
现在,您的代码应该是:
IBaseNews-newclass=NewsItem.GlassCast(true,true);
//现在可以使用Author属性
您可以按如下方式使用推断类型:
公共接口IBaseNews
{
字符串作者{get;set;}
//在下面列出所有其他共享字段
}
[SitecoreType(TemplateId=“…”,AutoMap=true)]
公共类新闻站点A:IBaseNews
{
[SitecoreField]
公共字符串作者{get;set;}
//列出SiteA唯一的所有字段
}
[SitecoreType(TemplateId=“…”,AutoMap=true)]
公共类新闻站点B:IBaseNews
{
[SitecoreField]
公共字符串作者{get;set;}
//列出SiteB唯一的所有字段
}
现在,您的代码应该是:
IBaseNews-newclass=NewsItem.GlassCast(true,true);
//现在可以使用Author属性
您可以按如下方式使用推断类型:
公共接口IBaseNews
{
字符串作者{get;set;}
//在下面列出所有其他共享字段
}
[SitecoreType(TemplateId=“…”,AutoMap=true)]
公共类新闻站点A:IBaseNews
{
[SitecoreField]
公共字符串作者{get;set;}
//列出SiteA唯一的所有字段
}
[SitecoreType(TemplateId=“…”,AutoMap=true)]
公共类新闻站点B:IBaseNews
{
[SitecoreField]
公共字符串作者{get;set;}
//列出SiteB唯一的所有字段
}
现在,您的代码应该是:
IBaseNews-newclass=NewsItem.GlassCast(true,true);
//现在可以使用Author属性
首先,我建议更新到Glass的最新版本,原因还有很多,包括代理功能
根据注释中的推断类型示例-您不应该使用GlassCast,请使用sitecore服务/上下文中的CreateType(Item)。如果您采用中包含委托的版本,则sitecore服务上现在有一个正式的强制转换(项目)
另外,使用a的示例无法解决类型上的差异。代理将使这变得非常容易。请记住,对于委托,没有延迟加载,在这种情况下,这并不重要
public interface INews
{
// All my other fields
string Author { get; set; }
}
流畅的配置类似于(在GlassScCustom中完成)
SitecoreType=newsitecoretype();
委托(y=>y.Author).GetValue(GetAuthor);
fluentConfig.Add(sitecoreType);
私有字符串GetAuthor(SitecoreDataMappingContext参数)
{
项目=参数项目;
如果(item.TemplateID==)
{
//从下拉链接返回值
}
返回项[“作者”];
}
首先,我建议更新到Glass的最新版本,原因还有很多,包括代理功能
根据注释中的推断类型示例-您不应该使用GlassCast,请使用si中的CreateType(Item)
SitecoreType<INews> = new SitecoreType<INews>();
sitecoreType.Delegate(y => y.Author).GetValue(GetAuthor);
fluentConfig.Add(sitecoreType);
private string GetAuthor(SitecoreDataMappingContext arg)
{
Item item = arg.Item;
if(item.TemplateID == <templateid>)
{
// return the value from the drop link
}
return item["Authors"];
}