우리는 최근에 비슷한 것을해야했습니다. techphoria414와 같은 줄을 따라 업로드 저장 파이프 라인을 활용할 것입니다. 그런 다음 좀 더 일반적이고 재사용 할 수 있도록 Sitecore의 구성 구문 분석 기능을 사용하여 모든 것을 핸들러에 연결합니다. 여기에 우리가 함께했던 것이 있습니다.
필요 "프로세스"방법
Main 클래스 :
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>
수정 또는 추가 할 새 템플릿 규칙이된다 필요에 따라 설정을 편집하는 것만 큼 간단합니다.
희망이 도움이됩니다.
우리는 이와 비슷한 접근법을 사용했습니다. 이제 문제는 표준 템플릿 값이 원래 템플릿의 값이라는 점입니다. 이것은 몇 가지 추가 코드로 해결되지만 허락을 받아 들일 것입니다. – Aljopro
또한 어떤 이유로 드래그 앤 드롭 API가이 파이프 라인을 따르지 않으므로이를 사용하려면 더 많은 작업이 필요합니다. Consistency는 Sitecore가이 분야에서 파악하지 못하는 것 같습니다. – Aljopro
Aljopro 표준 값 문제를 해결하기 위해 코드가 변경 되었습니까? –