【问题标题】:Sitecore How to add Item's version in English language via pipelinesSitecore 如何通过管道添加项目的英文版本
【发布时间】:2016-01-25 22:14:41
【问题描述】:

使用 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中添加它。

【问题讨论】:

    标签: c# sitecore sitecore7.2


    【解决方案1】:

    据我所知,当你打电话时:

    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 &amp;&amp; !string.IsNullOrEmpty(_item[field.Key])) { newEnItem[field.Key] = _item[field.Key] } }

    【讨论】:

    • 谢谢,如果我还想在English 版本中保留相同的数据,我需要做什么。除了将字段标记为“共享”之外的任何想法?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多