sitecore - Glass.Mapper V3 能否支持语言回退(字段级和项目级)?

标签 sitecore sitecore6 glass-mapper

我们刚刚更新了我们的项目以使用 Glass.Mapper V3。我们喜欢它。但是我们遇到了一个问题。它似乎不尊重语言回退。

我们设置了我们的网站,以便如果用户选择非默认语言,他们将看到该语言的项目(如果存在)。如果没有,他们将看到默认(“后备”)语言版本。我们还在字段级别进行了设置,以便如果某个项目存在非默认版本但并非所有字段都已更改,则任何未更改的字段将回退到该字段的默认语言版本值。

我们可以做些什么来让 Glass 使用语言回退?

最佳答案

我正在更新此内容,并了解我们为何进行检查的一些背景知识。如果您请求一个不存在的 Sitecore 项目,您会得到一个空值,因此处理起来很简单。但是,如果您要求使用该特定语言不存在的 Sitecore 项目,则会返回没有版本的项目。这意味着我们必须进行此检查,否则 Glass 最终会返回空类,我认为这没有多大意义。

这个答案会有点实验性。

首先在 Spherical.cs 文件中,您需要禁用检查:

protected void Application_BeginRequest()
{
    Sitecore.Context.Items["Disable"] = new VersionCountDisabler();
}

然后我们可以稍后将检查移至对象构造管道。首先创建一个任务:

public class FallbackCheckTask : IObjectConstructionTask
{
    public void Execute(ObjectConstructionArgs args)
    {
        if (args.Result == null)
        {
            var scContext = args.AbstractTypeCreationContext as SitecoreTypeCreationContext;
            if (scContext.Item == null)
            {
                args.AbortPipeline();
                return;
            }    
            //this checks to see if the item was created by the fallback module
            if (scContext.Item is Sitecore.Data.Managers.StubItem)
            {

                return;
            }

            // we could be trying to convert rendering parameters to a glass model, and if so, just return.
            if (String.Compare(scContext.Item.Paths.FullPath, "[orphan]/renderingParameters", true) == 0)
            {
                return;
            }

            if (scContext.Item.Versions.Count == 0)
            {
                args.AbortPipeline();
                return;
            }
        }
    }
}

然后最后在 GlassMapperScCustom 类中注册这个任务:

    public static void CastleConfig(IWindsorContainer container){
        var config = new Config();

        container.Register(
            Component.For<IObjectConstructionTask>().ImplementedBy<FallbackCheckTask>().LifestyleTransient()
            );
        container.Install(new SitecoreInstaller(config));
    }

我还没有测试过这个,但理论上它应该可以工作 <- 免责声明 ;-)

关于sitecore - Glass.Mapper V3 能否支持语言回退(字段级和项目级)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19692504/

相关文章:

sitecore - Sitecore 工作流程和标准值继承的烦人问题

html - 页面编辑器中的 Sitecore 富文本字段在包含 HTML 格式时不可编辑

asp.net-mvc - 使用 glassmapper 在 Sitecore MVC 中重用多个模型的 View

lucene - Sitecore:在 lucene 搜索期间排除项目

asp.net - 从 HttpRequest 获取状态码

javascript - Sitecore Javascript 压缩/缩小和 LESS 编译

iis - 当我重定向到 Sitecore 的某一页面时,为什么它会抛出 NullReferenceException 异常?

asp.net - Sitecore:打开 HTML 缓存会阻止回发行为

Sitecore - 对规则引擎字段类型的动态操作

c# - Glass.Mapper 不在 BeginRenderLink 方法中应用附加参数