2011-05-16 14 views
6

Estoy heredando una implementación existente de Sitecore que tiene grandes carpetas de contenido, todas usando la misma plantilla. Algunas de las carpetas contienen literalmente cientos de artículos. Las diferentes carpetas deberían ser de interés para diferentes tipos de Personas. Me gustaría no tener que ir artículo por artículo configurando las propiedades de Personas y Perfil para cada página individual. Idealmente, me gustaría ingresar a las propiedades solo una vez para una carpeta completa de artículos. ¿Cuál es la mejor práctica en un caso como este?Sitecore OMS: mejor práctica para la jerarquía de contenido

¿Debo crear una plantilla diferente para cada tipo de artículo? ¿O hay una forma de heredar estas propiedades de un elemento principal en el árbol de contenido?

Gracias

EDITAR

yo tuvimos una conversación en línea con John West, director de tecnología de EE.UU. Sitecore. Aquí están sus sugerencias para abordar este problema. Pensé en compartirlos aquí ya que otras personas podrían estar interesadas en resolver un problema similar.

No conozco ninguna solución existente para heredar estos valores, pero es probable que haya otros enfoques (tal vez similares al lenguaje alternativo).

Si el número de plantillas es relativamente pequeño, probablemente usaría el enfoque de plantillas: convierta la plantilla existente en una plantilla base para plantillas para todos los elementos existentes y actualice las opciones de inserción en consecuencia. No estaría de más poner estas cosas en carpetas, pero no heredarán estos valores de esa manera (podrías implementar algo que los heredara como se mencionó anteriormente). Uno de los beneficios aquí es que puede actualizar esos detalles en valores estándar, que se aplicarían a todos los artículos basados ​​en esas plantillas.

Otra forma sería implementar algo así como diseño y ajustes preestablecidos de seguridad, pero para estos otros valores.

Hagas lo que hagas, asegúrate de que cuando el usuario crea un nuevo elemento, pueda aplicar fácilmente estas propiedades o se apliquen automáticamente.

Otra forma sería escribir un script que actualice los elementos existentes, pero eso no ayuda con los artículos futuros (a menos que haga algo como un controlador de guardar para aplicar los mismos valores automáticamente en la creación). Tal vez copie los valores de esa carpeta principal.

Me gustó la idea de añadir un campo booleano a la plantilla existente que controla si el artículo se supone que copiar los valores del perfil de su matriz directa y luego implementar un salvamento manejador de hacer la copia al establecer dicho campo a verdad Entonces le pregunté a John si había documentación sobre cómo construir tales manipuladores. Aquí está su especie respuesta:

Esto explica algunas de las maneras en que puede aprovechar para la creación/cambio de elemento para ajustar sus valores:

http://www.sitecore.net/Community/Technical-Blogs/John-West-Sitecore-Blog/Posts/2010/11/Intercepting-Item-Updates-with-Sitecore.aspx

Asumo que usted podría utilizar un elemento Guardado controlador de eventos. Evito el elemento: manejadores creados porque si mi lógica falla, quiero que se ejecute nuevamente en el siguiente evento de guardar. En su caso, si estos campos están vacíos, es probable que desee establecer el valor.

Puede utilizar la fábrica para pasar los parámetros a su controlador de eventos para evitar la codificación.Por ejemplo, puede pasar el maestro de nombre de la base de datos (cancelar el controlador si el elemento guardado está en una base de datos diferente) y una lista de los ID de plantilla afectados. Entonces puede agregar plantillas más fácilmente a la lista en el futuro.

http://www.sitecore.net/en/Community/Technical-Blogs/John-West-Sitecore-Blog/Posts/2011/02/The-Sitecore-ASPNET-CMS-Configuration-Factory.aspx

He aquí alguna información sobre eventos:

http://sdn.sitecore.net/Articles/API/Using%20Events.aspx

Esto incluye un ejemplo que utiliza un controlador de ahorrar:

http://www.sitecore.net/Community/Technical-Blogs/John-West-Sitecore-Blog/Posts/2010/06/Sitecore-Shared-Source-NewsMover-Categorizes-News-by-Date.aspx

Respuesta

3

Creo que puede haber una mejor forma de d esto, usando la tubería startTracking. Consulte el procesador Sitecore.Analytics.Pipelines.StartTracking.ProcessItem. Aquí es donde Sitecore obtiene el elemento de contexto y registra sus valores de perfil en AnalyticsTracker utilizando una clase de soporte, TrackingFieldProcessor. Puede duplicar esta clase y, dependiendo de la plantilla del elemento de contexto (o un indicador en la plantilla), también puede registrar los datos de perfil de sus padres utilizando el método TrackingFieldProcessor.Process (Item).

EDITAR

Esto es un poco de nuevo a mí también en cuanto a la API de Sitecore va, pero aquí están los pasos más específicos que debe tratar. Debe usar IlSpy para ver las clases a las que se hace referencia en Sitecore.Analytics.dll.

  1. crear una subclase de Sitecore.Analytics.Pipelines.StartTracking.StartTrackingProcessor
  2. Implementar el método de proceso, utilizando Sitecore.Analytics.Pipelines.StartTracking.ProcessItem como referencia. Si Context.Item cumple con sus criterios (por ejemplo, GUID de plantilla), utilice el siguiente código para realizar un seguimiento de los análisis en función de su elemento primario.
  3. Agregue su clase a Sitecore.Analytics.config como el último elemento en la tubería startTracking.

    TrackingFieldProcessor trackingFieldProcessor = new TrackingFieldProcessor(); trackingFieldProcessor.Process (elemento.Parent);

En caso de que usted no está familiarizado con el uso de gasoductos:

http://adeneys.wordpress.com/2008/08/27/creating-and-running-custom-pipelines-in-sitecore/

(Aunque esto no es una canalización personalizada, estas a golpear ligeramente en una ya existente.)

+0

Me gusta esto mejor. La otra solución requeriría un "guardar" para copiar los valores del padre al hijo. Su solución no requeriría eso. Un cambio en el padre sería inmediatamente visible por todos los niños marcados. –

+0

No estoy muy familiarizado con esta parte de la API. ¿Puedes compartir algún enlace para comenzar (es decir, documentación de API, ejemplos, ...)? Gracias –

Cuestiones relacionadas