2016-05-29 12 views
2

Ich habe Projekt in Umbraco 7.4.3. Ich muss Media-Ordner programmatisch für jedes spezifische Objekt erstellen, das ich in der Umbraco-Backoffice erstellen.Erstellen Ordner in Umbraco - Umbraco 7

Zum Beispiel: Ich erstelle Hotel im Backoffice und ich gehe zu meiner Überladung der Funktion "Umbraco.Core.Services.ContentService.Saved" innerhalb dieser Funktion versuche ich, Medienordner zu erstellen (gleicher Name wie mein neuer Hotelname) unter dem vorhandenen Medienordner namens "Hotels" für die Bilder des Hotels.

enter image description here

Antwort

4

nicht überlasten eine der Servicefunktionen. Sie sollten stattdessen eine von ApplicationEventHandler abgeleitete Klasse erstellen und die ApplicationStarted-Methode überschreiben. Dort können Sie an das Ereignis ContentService.Saving (oder Saved) anhängen und dann Ihr Medienelement direkt mit Services.Media.CreateMedia() erstellen. Weitere Informationen finden Sie unter https://our.umbraco.org/documentation/Reference/Events/.

z.B .:

using Umbraco.Core; 
using Umbraco.Core.Events; 
using Umbraco.Core.Logging; 
using Umbraco.Core.Models; 
using Umbraco.Core.Services; 

namespace MyProject.EventHandlers 
{ 
    public class RegisterEvents : ApplicationEventHandler 
    { 
     protected override void ApplicationStarted(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext) 
     { 
      //Listen for when content is being saved 
      ContentService.Saving += ContentService_Saving;  
     } 

     /// <summary> 
     /// Listen for when content is being saved, check if it is a new 
     /// Hotel item and create new Media Folder. 
     /// </summary> 
     private void ContentService_Saving(IContentService sender, SaveEventArgs<IContent> e) 
     {     
      IMedia parentFolder; // You need to look this up. 
      foreach (var content in e.SavedEntities 
       //Check if the content item type has a specific alias 
       .Where(c => c.Alias.InvariantEquals("Hotel")) 
       //Check if it is a new item 
       .Where(c => c.IsNewEntity())) 
      { 
       Services.Media.CreateMedia(e.Name, parentFolder, "Folder"); 
      } 
     } 
    } 
} 

Hinweis: ich diesen Code nicht getestet; Sie werden es wahrscheinlich debuggen müssen; und es liegt an Ihnen, den übergeordneten Ordner anzugeben.