最近似たようなことをしなければなりませんでした。 techphoria414と同じ行に沿って、私はアップロード保存パイプラインを利用します。その後、少し一般的で再利用可能にするために、Sitecoreの設定解析機能を使用して、ハンドラまですべてをフックします。ここで私たちは結局終わりました。
必要な "プロセス" 方法と
メインクラス:
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もこのパイプラインに従わないので、これを有効にするにはさらに多くの作業が必要です。整合性は、Sitecoreがこれらの分野で把握していないもののようです。 – Aljopro
Aljopro標準値の問題を修正するコードの変更はありますか? –