簡體   English   中英

Sitecore如何通過管道添加英文版本的Item版本

[英]Sitecore How to add Item's version in English language via pipelines

我使用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添加Content Language

根據我的記憶,當您致電時:

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] } }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM