Sitecore为大量商品添加新版本

时间:2014-02-06 20:02:29

标签: sitecore sitecore6

我有很多项目只有'en'语言版本。 我必须为所有这些项目创建'de'版本。 (在内容编辑器中将语言切换为'de',然后单击'添加新版本',这就是全部,无需翻译)。这些项是普通父项的子项,它适用于该父项根项的所有子项。

执行此任务最实用的方法是什么?

此问题存在挑战。我只能访问带有admin用户的sitecore内容编辑器。我无法编写脚本并在系统上运行它。

4 个答案:

答案 0 :(得分: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检索项目 但至少你可以了解如何为特定语言添加新版本。

答案 1 :(得分:1)

Sitecore Marketplace中有一个名为ItemVersioner的模块。使用此模块,您只需单击一下即可创建所有可用语言的项目版本。这有两个缺点:

  • 您必须单击每个项目,然后单击其他时间添加版本。如果你的任务是一次性任务,那么无论如何它都可能是一个解决方案。
  • 它为/sitecore/system/Languages下配置的所有语言创建版本。如果你有其他版本而不是" en"和" de",如果您不想创建这些版本,则可能需要暂时删除它们。

如果这不是解决方案,我认为您必须创建一些自定义代码。我认为来自Ruud van Falier的代码可以从中开始。您需要在本地计算机上创建此代码,如果这对您有用,您可以使用此代码创建Sitecore包(有关如何创建包的信息,请查看SDN here)。然后,您可以在系统上安装此软件包并启动代码(您也可以创建一个新的功能区,执行代码以创建版本,检查this thread作为起点)。

答案 2 :(得分:1)

如果你真的没有要翻译的内容,你只想在不存在的情况下显示项目的en版本,那么你应该考虑使用Language Fallback Module,这正是模块设计的内容要做。

如果稍后您需要添加de版本的项目,那么您可以根据具体情况进行添加内容。

答案 3 :(得分:0)