2012-08-29 8 views

risposta

6

Uno dei siti su cui ho lavorato richiedeva la presenza di non più di 6 elementi figlio sotto un determinato tipo di elemento. Abbiamo preso in considerazione l'utilizzo di una regola di opzione di inserimento, ma abbiamo deciso di abbandonare l'idea perché non impediva la copia, lo spostamento o la duplicazione di elementi.

Invece abbiamo deciso di estendere l'evento item:created con un gestore specifico per questa attività. Di seguito è riportato un esempio semplificato di come funziona. Un ovvio miglioramento sarebbe quello di recuperare il limite massimo di figli da un campo sull'elemento padre (ovviamente visibile solo agli amministratori). Probabilmente potresti anche sfruttare il motore delle regole anche qui ...

public void OnItemCreated(object sender, EventArgs args) 
{ 
    var createdArgs = Event.ExtractParameter(args, 0) as ItemCreatedEventArgs; 

    Sitecore.Diagnostics.Assert.IsNotNull(createdArgs, "args"); 
    if (createdArgs != null) 
    { 
     Sitecore.Diagnostics.Assert.IsNotNull(createdArgs.Item, "item"); 
     if (createdArgs.Item != null) 
     { 
      var item = createdArgs.Item; 

      // NOTE: you may want to do additional tests here to ensure that the item 
      // descends from /sitecore/content/home 
      if (item.Parent != null && 
       item.Parent.TemplateName == "Your Template" && 
       item.Parent.Children.Count() > 6) 
      { 
       // Delete the item, warn user 
       SheerResponse.Alert(
        String.Format("Sorry, you cannot add more than 6 items to {0}.", 
             item.Parent.Name), new string[0]); 
       item.Delete(); 
      } 
     } 
    } 
} 
+0

Puoi condividere tutti i dettagli? Sono nuovo per il sitecore e non sono completamente sicuro da dove cominciare .... dove va questo gestore di eventi? –

+1

Ecco un [articolo su eventi Sitecore] (http://sdn.sitecore.net/Articles/API/Using%20Events.aspx). È vecchio, ma la maggior parte è ancora rilevante. Fondamentalmente, dovresti aggiungere un riferimento a questa classe nel web.config nella sezione sitecore/events e verrà eseguito ogni volta che viene creato un oggetto. –

+1

Inoltre, ecco un esempio di riferimento: '' –