2012-08-29 8 views

Respuesta

6

Uno de los sitios en los que trabajé tenía el requisito de que no pudieran existir más de 6 elementos secundarios por debajo de cierto tipo de elemento. Consideramos usar una regla de opción de inserción, pero decidimos abandonar la idea porque no impedía copiar, mover o duplicar elementos.

En su lugar, decidimos ampliar el evento item:created con un controlador específicamente para esta tarea. A continuación se muestra un ejemplo simplificado de cómo funciona. Una mejora obvia sería obtener el límite máximo de hijos de un campo en el elemento principal (visible solo para los administradores, por supuesto). Probablemente puedas incluso aprovechar el motor de reglas aquí ...

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

¿Puedes compartir todos los detalles? Soy nuevo en el sitio, y no estoy completamente seguro de dónde empezar ... ¿A dónde va este controlador de eventos? –

+1

Aquí hay un [artículo sobre eventos de Sitecore] (http://sdn.sitecore.net/Articles/API/Using%20Events.aspx). Es viejo, pero la mayor parte sigue siendo relevante. Básicamente, debería agregar una referencia a esta clase en el archivo web.config en la sección sitecore/events y se ejecutará cada vez que se crea un elemento. –

+1

Además, aquí hay una referencia de ejemplo: '' –

Cuestiones relacionadas