Sitecore如何通过管道以英语添加Item的版本

时间:2016-01-25 13:23:52

标签: c# sitecore sitecore7.2

使用Sitecore事件处理程序' OnItemSave',如果该项目不存在,我将添加该项目的英语版本。

public void OnItemSaved(object sender, EventArgs args)
{
    var item = Event.ExtractParameter<Item>(args, 0);
    if (item == null) return;
    //Add version of item in English
    if (Sitecore.Context.Database.GetItem(item.ID, Sitecore.Data.Managers.LanguageManager.GetLanguage("en")) == null)
    using (new LanguageSwitcher("en"))
       {
         item.Versions.AddVersion(); 
       }
}

但是这不会使用en语言添加版本,而是将其添加到Content Language

1 个答案:

答案 0 :(得分:5)

从我记忆中,当你打电话时:

Item enItem = Sitecore.Context.Database.GetItem(item.ID, Sitecore.Data.Managers.LanguageManager.GetLanguage("en"))

如果没有en版本,但此项目包含任何其他语言的版本,您仍会获得Item对象,但enItem.Versions.Count将为0。

你应该尝试类似的东西(未经测试!):

Item enItem = Sitecore.Context.Database.GetItem(item.ID, Sitecore.Data.Managers.LanguageManager.GetLanguage("en"))
if (enItem.Versions.Count == 0)
{
    using (new LanguageSwitcher("en"))
    {
        enItem.Editing.BeginEdit();
        enItem.Versions.AddVersion();
        enItem.Editing.EndEdit();
    }
}

修改 如果您需要将原始项目中的字段复制到EN项目:

  1. Item newEnVersion = enItem.Versions.AddVersion();
  2. item.Fields.ReadAll()
  3. foreach (Field field in _item.Fields) { if (field != null && !string.IsNullOrEmpty(_item[field.Key])) { newEnItem[field.Key] = _item[field.Key] } }