Sitecore 为不同站点映射两个模板

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自动尝试映射“作者”字段时,对于自由文本字段,它将失败 解决方案: 这可以通过在所有网站上创建“作者”下拉列表来解决,

我们正在开发一个多站点sitecore解决方案,其中每个站点都可以有自己的新闻,也可以显示来自其他站点的合并新闻

问题: 每个网站都有其独特的新闻要求,其中90%的模板字段匹配,但其余10%不同

例如,Site-A具有带有作者下拉列表的新闻模板,其中作者列表是在配置节点上编写的。其中as Site-B有新闻模板,其中Author是一个自由文本字段

所以,当Glass Mapper自动尝试映射“作者”字段时,对于自由文本字段,它将失败

解决方案: 这可以通过在所有网站上创建“作者”下拉列表来解决,但产品所有者不希望这样

另一种解决方案是从两个来源手动映射新闻字段,或者使用AUTOMAP等

理想的解决方案: Glassmapper动态自动解析并填充作者文本字段或下拉字段

有可能吗

谢谢。

我会通过“流畅配置”来解决这个问题。 结合最近添加到Glass Mapper的新代理功能。 代理功能最初在此处介绍和描述:

代理功能的Nuget包:

我将通过“流畅配置”来解决这个问题。 结合最近添加到Glass Mapper的新代理功能。 代理功能最初在此处介绍和描述:

代理功能的Nuget包:

我将通过“流畅配置”来解决这个问题。 结合最近添加到Glass Mapper的新代理功能。 代理功能最初在此处介绍和描述:

代理功能的Nuget包:

我将通过“流畅配置”来解决这个问题。 结合最近添加到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"];
}