2014-02-06 23 views
2

我有大量的商品只有'en'語言版本。 我必須爲所有這些項目創建'de'版本。 (在內容編輯器中將語言切換爲「de」,然後單擊「添加新版本」即可),無需翻譯)。這些項目是共同父項的子項,它適用於該父項根項目的所有子項。Sitecore爲大量商品添加新版本

什麼是最實際的方法來完成這項任務?

這個問題有一個挑戰。我只能訪問管理員用戶的sitecore內容編輯器。我不能編寫腳本並在系統上運行它。

回答

1

你會做這樣的事情:

var master = Sitecore.Configuration.Factory.GetDatabase("master"); 

// Get the root folder of the items you want to create versions for. 
var root = master.GetItem("path_or_GUID_to_root_item"); 

// Switch to the language you want to create versions for. 
using (new LanguageSwitcher("de")) 
{ 
    // Loop through all descendants. 
    foreach (Item descendant root.Axes.GetDescendants()) 
    { 
     // Create new version using the current context language. 
     var version = descendant.Versions.AddVersion(); 

     // Lines below are optional if you want to add field values to the version. 
     version.Editing.BeginEdit(); 
     version.Fields["field_name_or_GUID"] = "value"; 
     version.Editing.EndEdit(); 
    } 
} 

裸記住,Axes.GetDescendants()不是很表現友好,如果你有很多的項目。
因此,如果您認真對待它,請使用ContentSearch API檢索項目。
但至少你知道如何爲特定語言添加新版本。

+0

的問題是,我沒有訪問到Web服務器。所以我不能部署任何東西。這就是爲什麼,我想研究只有在sitecore內容編輯器中可用的選項 – EngelbertCoder

+0

啊好吧,那麼你可能在看體力勞動:) –

1

Sitecore Marketplace中有一個叫做ItemVersioner的模塊。通過此模塊,您只需點擊一下即可創建所有可用語言的項目版本。這有兩個缺點:

  • 你必須點擊每個項目,然後單擊另一次添加版本。如果你的任務是一次性任務,那麼無論如何這也許是一個解決方案。
  • 它爲在/sitecore/system/Languages下配置的所有語言創建版本。如果您的版本不是「en」和「de」,那麼如果您不想創建這些版本,則可能需要臨時刪除它們。

如果這不是一個解決方案,我認爲你必須創建一些自定義代碼。我認爲從Ruud van Falier開始的代碼是可以的。您需要在本地機器上創建此代碼,如果這適用於您,則可以使用此代碼創建Sitecore軟件包(有關如何創建軟件包的信息,請參閱SDN here)。然後,您可以在系統上安裝此軟件包並啓動代碼(您也可以創建一個新的功能區,執行代碼以創建版本,請檢查this thread以獲取起點)。

+0

如果要創建多個語言版本,ItemVersioner會很酷,但它確實在這種情況下不幫助我。手動點擊每個項目並點擊「添加新版本」也是同樣的努力。絲帶的想法聽起來不錯。我會看看那個,thanx – EngelbertCoder

1

如果你確實沒有內容需要翻譯,並且你只想顯示de的項目的en版本,那麼你應該考慮使用Language Fallback Module,這正是模塊設計的目的。

如果後來您需要添加de版本的項目,那麼您可以在逐個案例的基礎上添加內容。

相關問題