2011-10-24 11 views
9

Estoy intentando crear un tema (convertir una plantilla existente que tengo) en Orchard, pero me quedé atascado al diseñar el widget de Blog Archives. Tengo una zona "barra lateral" en la que coloqué el widget.¿Cómo diseñar un widget en Orchard?

Con el fin de tener el marcado de salida Quiero he creado una nueva plantilla en mi carpeta Vistas: Widget-BlogArchives.cshtml Toda la plantilla tiene que envolver el contenido del widget en un div, así:

<div class="box box_small"> 
    @Display(Model.Content) 
</div> 

Así que esperaba que todo el contenido del widget estuviera dentro de mi div. Sin embargo, el HTML generado se ve así:

<article class="widget-blog-archives widget" shape-id="15"> 
    <header shape-id="15"> 
    <h1 shape-id="15">The Archives</h1> 
    </header> 
    <div class="box box_small" shape-id="15"> 
    <div class="archives" shape-id="16"> 
     <ul class="archiveMonthList" shape-id="16"> 
     <li class="first last" shape-id="16"> 
     <a href="(shortened)/10" shape-id="16">October 2011 (1)</a> 
    </li> 
    </ul> 
    </div> 
    </div> 
</article> 

Lo que no entiendo es de dónde viene el envoltorio del artículo completo? ¿Cómo puedo obtener el encabezado en mi div y cambiarlo a a?

¿Podría alguien también explicar en qué parte de la Modelo se almacena el título "The Archives"? Miré a través del modelo en la herramienta de trazado de formas pero no pude encontrarlo ...

Gracias.

ACTUALIZACIÓN

Como se explicó Bertrand Hice algunos cambios en mi Widget-BlogArchives.cshtml:

@using Orchard.ContentManagement 
@using Orchard.Widgets.Models 
@{ 
    Model.Metadata.Wrappers.Clear(); 
    var title = ((IContent)Model.ContentItem).As<WidgetPart>().Title; 
} 
<div class="box box_small"> 
    <h3>@title</h3> 
    @Display(Model.Content) 
</div> 

Esto ahora genera el código HTML que quiero.

Respuesta

4

Este marcado proviene del envoltorio del widget. Es posible suprimir el contenedor llamando a Model.Metadata.Wrappers.Clear(). A continuación, puede encargarse por completo de la reproducción desde su propio reemplazo de widget.

Si abre widget.wrapper.cshtml, encontrará la respuesta a la segunda pregunta:

var title = ((IContent)Model.ContentItem).As<WidgetPart>().Title; 

que también podría ser hecho de esta manera:

var title = Model.ContentItem.WidgetPart.Title 
+0

Gracias Bertrand. ¿Dónde pondría el código para borrar los envoltorios? ¿Y esta es una forma recomendada de diseñar widgets o debería reemplazar el wrapper en lugar de Widget-BlogArchives.cshtml? Todavía estoy intentando comprender todos los conceptos aquí y cuáles son las mejores prácticas. – b3n

+0

Poner ese código en su plantilla de widget anular. algo así como widget-blogarchives.cshtml, dependiendo de lo que intentes hacer (mira las alternativas disponibles en el seguimiento de formas para decidir cuál quieres, tal vez quieras agregar la función de widget de alternativas, por cierto, para obtener más posibilidades).) No se pueden alternar envolturas, por lo que anular la plantilla del envoltorio del widget se anulará para todos los widgets. Probablemente no es lo que quieres. así que sí, esta es una manera perfectamente razonable de hacer las cosas. –

+0

Sí Obtuve la función de alternos habilitada, por lo tanto reemplazando Widgets-BlogArchives.cshtml. Simplemente no pude averiguar de dónde vino el encabezado porque no pude encontrarlo en la herramienta de trazado de formas. – b3n