gpt4 book ai didi

sitecore - 在 Sitecore 7.5 中,如何以编程方式创建具有语言版本控制的媒体项目?

转载 作者:行者123 更新时间:2023-12-03 15:23:37 27 4
gpt4 key购买 nike

我希望能够在代码中创建/更新媒体项目并使用语言版本控制。这里有更多的细节。我有一个产品内容项。保存该项目后,我希望能够生成该项目的 PDF 版本并将其保存到媒体库中。如果媒体库中已经存在 PDF 版本,我需要能够更新它。此外,这是一个多语言站点。因此,如果有人保存产品内容项的法语版本,我需要能够生成 PDF 的法语版本,并且仅在媒体库中保存/更新相关 PDF 的法语版本 - 不涉及任何其他语言版本的PDF。我似乎无法弄清楚如何做到这一点。我目前拥有的代码执行以下操作:如果我保存产品的英文版本,那么它会创建 PDF 的英文版本。但是,如果我保存产品的法语版本,它会创建 PDF 的法语版本并删除 PDF 的英文版本。

有人知道怎么做吗?

    public static Item AddMediaItem(byte[] fileBuffer, string fullMediaPath, string fileNameWithExtension, string title, Language language)
{
try
{
var db = Sitecore.Configuration.Factory.GetDatabase("master");
var options = new MediaCreatorOptions();
options.FileBased = false;
options.IncludeExtensionInItemName = false;
options.KeepExisting = false;
options.Versioned = true;
options.Destination = fullMediaPath;
options.Database = db;
options.Language = language;

var creator = new MediaCreator();
var fileStream = new MemoryStream(fileBuffer);

var pdfItem = db.GetItem(fullMediaPath, language);
if (pdfItem != null)
{
var updatedItem = creator.AttachStreamToMediaItem(fileStream, fullMediaPath, fileNameWithExtension,
options);
updatedItem.Editing.BeginEdit();
updatedItem.Fields["Title"].Value = title;
updatedItem.Editing.EndEdit();
return updatedItem;
}
else
{
//Create a new item
var newItem = creator.CreateFromStream(fileStream, fileNameWithExtension, options);
newItem.Editing.BeginEdit();
newItem.Fields["Title"].Value = title;
newItem.Editing.EndEdit();
return newItem;
}
}
catch (Exception ex)
{
return null;
}
}

最佳答案

感谢@JanBluemink 为我指明了正确的方向。我在以下文章中找到了正确的方法:Sitecore.Resources.Media.MediaCreator deletes versions of media .我只需要修改代码以在更新时使用 MediaManager 而不是 MediaCreator。

    public static Item AddMediaItem(byte[] fileBuffer, string fullMediaPath, string fileNameWithExtension, string title, Language language)
{
try
{
var db = Sitecore.Configuration.Factory.GetDatabase("master");
var options = new MediaCreatorOptions();
options.FileBased = false;
options.IncludeExtensionInItemName = false;
options.KeepExisting = false;
options.Versioned = true;
options.Destination = fullMediaPath;
options.Database = db;
options.Language = language;

var creator = new MediaCreator();
var fileStream = new MemoryStream(fileBuffer);

var pdfItem = db.GetItem(fullMediaPath, language);
if (pdfItem != null)
{
var mediaItem = new MediaItem(pdfItem);
var media = MediaManager.GetMedia(mediaItem);
media.SetStream(fileStream, "pdf");

pdfItem.Editing.BeginEdit();
pdfItem.Fields["Title"].Value = title;
pdfItem.Editing.EndEdit();
return pdfItem;
}
else
{
//Create a new item
var newItem = creator.CreateFromStream(fileStream, fileNameWithExtension, options);
newItem.Editing.BeginEdit();
newItem.Fields["Title"].Value = title;
newItem.Editing.EndEdit();
return newItem;
}
}
catch (Exception ex)
{
return null;
}
}

关于sitecore - 在 Sitecore 7.5 中,如何以编程方式创建具有语言版本控制的媒体项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30732440/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com