gpt4 book ai didi

sitecore - 更改 Sitecore 媒体库中上传文件的模板

转载 作者:行者123 更新时间:2023-12-02 19:19:38 25 4
gpt4 key购买 nike

我对此做了一些研究,但不确定我是否理解解决以下问题所需的所有部分。

如果我的客户上传到某个文件夹,则需要使用特殊模板来代替媒体库中自动检测到的媒体模板。该模板具有特殊字段。该模板还可以容纳不同类型的文件(PDF、供应商特定格式、可执行文件)。

出于开发目的,我们当前正在上传文件,然后进行模板切换,但真正需要发生的是首先将文件上传到该模板类型。我想知道是否有一种方法可以连接到上传过程,以确保在媒体库中的某个路径下使用特殊模板?如果是这样,我应该从哪里开始?

最佳答案

我们最近不得不做类似的事情。与 techphoria414 一样,我会利用上传保存管道。然后,为了使其更加通用和可重用,请使用 Sitecore 的配置解析功能将所有内容连接到您的处理程序。这就是我们最终得到的结果。

具有所需“Process”方法的主类:

public class ChangeTemplate
{
public string Name { get; set; }
public string Path { get; set; }
public List<ChangedMediaTemplate> Templates { get; set; }

public ChangeTemplate()
{
Templates = new List<ChangedMediaTemplate>();
}

public void Process(UploadArgs args)
{
var db = Sitecore.Context.ContentDatabase;

var uploadPath = db.GetItem(args.Folder).Paths.ContentPath;
if (!uploadPath.StartsWith(Path))
{
// Not uploading to designated folder
return;
}

foreach (var item in args.UploadedItems)
{
// Need to change template for this item?
var changedTemplate = Templates.Where(t => t.Old.Equals(item.Template.FullName)).FirstOrDefault();
if (changedTemplate != null)
{
var newTemplate = db.Templates[changedTemplate.New];
try
{
item.ChangeTemplate(newTemplate);
}
catch (Exception e)
{
Log.Error("Unable to change {0} template on upload of {1} to {2}.".FormatWith(Name, item.Name, uploadPath), e, this);
}
}
}
}
}

次要支持类:

public class ChangedMediaTemplate
{
public string Old { get; set; }
public string New { get; set; }
}

然后是配置:

<processors>
<uiUpload>
<processor patch:after="*[@type='Sitecore.Pipelines.Upload.Save, Sitecore.Kernel']" mode="on" type="Foo.Project.SitecoreX.Pipelines.Upload.ChangeTemplate, Foo.Project.Classes">
<Name>Product Images</Name>
<Path>/sitecore/media library/Images/Foo/products</Path>
<Templates hint="list">
<Template type="Foo.Project.SitecoreX.Pipelines.Upload.ChangedMediaTemplate, Foo.Project.Classes">
<Old>System/Media/Unversioned/Image</Old>
<New>User Defined/Foo/Product/Image/Unversioned/Product Image</New>
</Template>
<Template type="Foo.Project.SitecoreX.Pipelines.Upload.ChangedMediaTemplate, Foo.Project.Classes">
<Old>System/Media/Unversioned/Jpeg</Old>
<New>User Defined/Foo/Product/Image/Unversioned/Product Jpeg</New>
</Template>
<Template type="Foo.Project.SitecoreX.Pipelines.Upload.ChangedMediaTemplate, Foo.Project.Classes">
<Old>System/Media/Versioned/Image</Old>
<New>User Defined/Foo/Product/Image/Versioned/Product Image</New>
</Template>
<Template type="Foo.Project.SitecoreX.Pipelines.Upload.ChangedMediaTemplate, Foo.Project.Classes">
<Old>System/Media/Versioned/Jpeg</Old>
<New>User Defined/Foo/Product/Image/Versioned/Product Jpeg</New>
</Template>
</Templates>
</processor>
</uiUpload>
</processors>

修改或添加新的模板规则变得就像根据需要编辑配置一样简单。

希望这有帮助!

关于sitecore - 更改 Sitecore 媒体库中上传文件的模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10503857/

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