【发布时间】:2014-02-06 20:02:28
【问题描述】:
我有大量只有“en”语言版本的项目。 我必须为所有这些项目创建“de”版本。 (在内容编辑器中将语言切换为“de”并单击“添加新版本”,仅此而已,无需翻译)。这些项是共同父项的子项,它适用于该父根项的所有子项。
完成这项任务最实用的方法是什么?
这个问题有一个挑战。我只能使用管理员用户访问站点核心内容编辑器。我无法编写脚本并在系统上运行它。
【问题讨论】:
我有大量只有“en”语言版本的项目。 我必须为所有这些项目创建“de”版本。 (在内容编辑器中将语言切换为“de”并单击“添加新版本”,仅此而已,无需翻译)。这些项是共同父项的子项,它适用于该父根项的所有子项。
完成这项任务最实用的方法是什么?
这个问题有一个挑战。我只能使用管理员用户访问站点核心内容编辑器。我无法编写脚本并在系统上运行它。
【问题讨论】:
你会这样做:
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作为一个起点)。
【讨论】:
如果您确实没有要翻译的内容,并且只想在某个项目不存在时显示 de 的 en 版本,那么您应该考虑使用 Language Fallback Module,这正是该模块的设计目的.
如果以后您需要添加项目的 de 版本,那么您可以在添加内容时根据具体情况执行此操作。
【讨论】: