コード例 #1
0
        protected override Item GetItem(ID itemId, Sitecore.Globalization.Language language, Version version, Database database)
        {
            var item = base.GetItem(itemId, language, version, database);

            if (item == null)
            {
                return(item);
            }

            if (item.Versions.GetVersionNumbers().Length > 0)
            {
                return(item);
            }

            var fallbackLanguage = Sitecore.Context.Site.GetFallbackLanguage();

            if (fallbackLanguage == null)
            {
                return(item);
            }

            Item fallback = base.GetItem(itemId, fallbackLanguage, Version.Latest, database);

            if (fallback == null)
            {
                return(item);
            }

            if (fallback.Versions.GetVersionNumbers().Length == 0)
            {
                return(item);
            }

            var stubData = new ItemData(fallback.InnerData.Definition, fallback.Language, fallback.Version, fallback.InnerData.Fields);
            var stub     = new LanguageStub(itemId, stubData, database)
            {
                OriginalLanguage = item.Language
            };

            stub.RuntimeSettings.SaveAll = true;

            return(stub);
        }
        protected override Item GetItem(ID itemId, Sitecore.Globalization.Language language, Version version, Database database)
        {
            var item = base.GetItem(itemId, language, version, database);

            if (item == null)
            {
                return(item);
            }

            if (item.Versions.GetVersionNumbers().Length > 0)
            {
                return(item);
            }

            //Try Default Language
            var defaultLang = Sitecore.Configuration.Settings.GetSetting("SF.LanguageStrategy.DefaultLanguage");

            if (string.IsNullOrEmpty(defaultLang))
            {
                return(item);
            }

            var fallbackLanguage = LanguageManager.GetLanguage(defaultLang);

            if (fallbackLanguage == null)
            {
                return(item);
            }

            Item fallback = base.GetItem(itemId, fallbackLanguage, Version.Latest, database);

            if (fallback != null && fallback.Versions.GetVersionNumbers().Length > 0)
            {
                var stubData = new ItemData(fallback.InnerData.Definition, fallback.Language, fallback.Version, fallback.InnerData.Fields);
                var stub     = new LanguageStub(itemId, stubData, database)
                {
                    OriginalLanguage = item.Language
                };
                stub.RuntimeSettings.SaveAll = true;

                return(stub);
            }

            //Item doesn't exist in default language, Let's take any other version.
            var installedLanguages = LanguageManager.GetLanguages(database);

            //Assume this will be in same order of languages as defined in System Languages
            foreach (var installedLanguage in installedLanguages)
            {
                fallback = base.GetItem(itemId, installedLanguage, Version.Latest, database);

                if (fallback != null && fallback.Versions.GetVersionNumbers().Length > 0)
                {
                    var stubData = new ItemData(fallback.InnerData.Definition, fallback.Language, fallback.Version, fallback.InnerData.Fields);
                    var stub     = new LanguageStub(itemId, stubData, database)
                    {
                        OriginalLanguage = item.Language
                    };
                    stub.RuntimeSettings.SaveAll = true;

                    return(stub);
                }
            }

            //Nothing Worked return the null item
            return(item);
        }