如果未在sitecore

时间:2015-06-12 07:17:06

标签: redirect sitecore

在我的sitecore网站中,重定向有一个棘手的要求。 有外部重定向,从sharepoint移动到sitecore项目到一些外部重定向。 例如:/abc.aspx(sharepoint_URL)到/ abc(sitecore项目)到http://abc.ly(外部URL)。

在/ abc(sitecore项目)中,我们只有英文版的项目,而http://abc.ly可以有多种语言版本。如果网站是用英文烹饪而不是正常工作,在其他语言中,由于版本计数而显示的404错误页面是真实的。那就是0。

要求是如果没有其他语言版本的项目应该指向'en'版本,即全局。 限制是营销人员不接受sitecore中项目的版本控制,我现在不想使用回退模块。我尝试的是:

Language currentLang = Sitecore.Context.Language;
                    Language LangEn= Language.Parse("en");
                    if(currentLang !=LangEn)
                    { currentLang =LangEn;
                    }
                    Item versionItem = Sitecore.Context.Database.GetItem(Context.Item.ID, currentLang);


                    if (versionItem.Versions.Count == 0){ // do something }`

请尽快建议

2 个答案:

答案 0 :(得分:0)

我想你可能想看一下语言后备。有module on the marketplace可以帮助您完成此操作。

话虽如此,鉴于该字段已共享,只需登录Sitecore并使用每种语言创建版本所需的时间将会少得多。

如果这种情况经常发生,您可以创建一个命令模板,该模板将运行代码以创建所有语言的项目。这可能会让你的作者节省一些时间。

答案 1 :(得分:0)

我在这里得到了一个非常精确的解决方案[http://www.roundedcube.com/Blog/2010/tackling-fallback-fields-and-values-in-sitecore],我只需要在config中添加处理器并相应地创建一个类。它对我有用。

<processor type="Sitecore.Pipelines.HttpRequest.ItemResolver, Sitecore.Kernel" />
<processor type="YourAssemblyHere.Pipelines.HttpRequest.FallbackLanguageProcessor, YourAssemblyHere " />
<processor type="Sitecore.Pipelines.HttpRequest.LayoutResolver, Sitecore.Kernel" />

并将相应的类添加到项目中。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace YourAssemblyHere.Pipelines.HttpRequest
{
public class FallbackLanguageProcessor
{
public void Process(Sitecore.Pipelines.HttpRequest.HttpRequestArgs args)
{
Sitecore.Data.Items.Item contextItem = Sitecore.Context.Item;
if (contextItem == null || contextItem.Versions.Count > 0)
return;


Sitecore.Globalization.Language language = Sitecore.Context.Language;
if (Sitecore.Context.Language.Name != "en")
language = Sitecore.Globalization.Language.Parse("en");
Sitecore.Data.Database contextDatabase = Sitecore.Context.Database;
Sitecore.Context.Item = contextDatabase.GetItem(Sitecore.Context.Item.ID, language);
}
}
}

感谢您提出建议,欢迎提出更多想法。