我有大量的商品只有'en'語言版本。 我必須爲所有這些項目創建'de'版本。 (在內容編輯器中將語言切換爲「de」,然後單擊「添加新版本」即可),無需翻譯)。這些項目是共同父項的子項,它適用於該父項根項目的所有子項。Sitecore爲大量商品添加新版本
什麼是最實際的方法來完成這項任務?
這個問題有一個挑戰。我只能訪問管理員用戶的sitecore內容編輯器。我不能編寫腳本並在系統上運行它。
我有大量的商品只有'en'語言版本。 我必須爲所有這些項目創建'de'版本。 (在內容編輯器中將語言切換爲「de」,然後單擊「添加新版本」即可),無需翻譯)。這些項目是共同父項的子項,它適用於該父項根項目的所有子項。Sitecore爲大量商品添加新版本
什麼是最實際的方法來完成這項任務?
這個問題有一個挑戰。我只能訪問管理員用戶的sitecore內容編輯器。我不能編寫腳本並在系統上運行它。
你會做這樣的事情:
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檢索項目。
但至少你知道如何爲特定語言添加新版本。
Sitecore Marketplace中有一個叫做ItemVersioner
的模塊。通過此模塊,您只需點擊一下即可創建所有可用語言的項目版本。這有兩個缺點:
/sitecore/system/Languages
下配置的所有語言創建版本。如果您的版本不是「en」和「de」,那麼如果您不想創建這些版本,則可能需要臨時刪除它們。如果這不是一個解決方案,我認爲你必須創建一些自定義代碼。我認爲從Ruud van Falier開始的代碼是可以的。您需要在本地機器上創建此代碼,如果這適用於您,則可以使用此代碼創建Sitecore軟件包(有關如何創建軟件包的信息,請參閱SDN here)。然後,您可以在系統上安裝此軟件包並啓動代碼(您也可以創建一個新的功能區,執行代碼以創建版本,請檢查this thread以獲取起點)。
如果要創建多個語言版本,ItemVersioner會很酷,但它確實在這種情況下不幫助我。手動點擊每個項目並點擊「添加新版本」也是同樣的努力。絲帶的想法聽起來不錯。我會看看那個,thanx – EngelbertCoder
如果你確實沒有內容需要翻譯,並且你只想顯示de的項目的en版本,那麼你應該考慮使用Language Fallback Module,這正是模塊設計的目的。
如果後來您需要添加de版本的項目,那麼您可以在逐個案例的基礎上添加內容。
的問題是,我沒有訪問到Web服務器。所以我不能部署任何東西。這就是爲什麼,我想研究只有在sitecore內容編輯器中可用的選項 – EngelbertCoder
啊好吧,那麼你可能在看體力勞動:) –