2011-10-24 19 views
9

Sto cercando di creare un tema (convertire un modello esistente che ho) in Orchard ma mi sono bloccato durante lo styling del widget Blog Archive. Ho una "barra laterale" di zona in cui ho posizionato il widget.Come stile un Widget nel frutteto?

Al fine di avere in output il markup che voglio ho creato un nuovo modello nel mio punto di vista cartella: Widget-BlogArchives.cshtml Tutto il modello fa avvolgere il contenuto del widget in un div in questo modo:

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

Quindi mi aspettavo che tutto il contenuto del widget fosse all'interno del mio div. Tuttavia l'HTML generato è simile al seguente:

<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> 

Quello che non capisco è dove l'intero articolo involucro è venuta da? Come posso ottenere l'intestazione nel mio div e cambiare in a?

Qualcuno potrebbe anche spiegare dove nel modello è memorizzato il titolo "Gli archivi"? Ho esaminato il modello nello strumento di tracciamento della forma ma non sono riuscito a trovarlo ...

Grazie.

UPDATE

Come Bertrand spiegato ho fatto alcune modifiche al mio 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> 

Questo ora genera il codice HTML che voglio.

risposta

4

Questo codice proviene dal wrapper widget. È possibile sopprimere il wrapper chiamando Model.Metadata.Wrappers.Clear(). È quindi possibile assumere completamente il rendering dal proprio override del widget.

Se si apre widget.wrapper.cshtml, troverete la risposta alla tua seconda domanda:

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

che potrebbe anche essere fatto in questo modo:

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

Grazie Bertrand. Dove metterei il codice per cancellare i wrapper? E questo è un modo consigliato per lo styling dei widget o dovrei ignorare il wrapper invece del Widget-BlogArchives.cshtml? Sto ancora cercando di cogliere tutti i concetti qui e quali sono le migliori pratiche. – b3n

+0

Inserirai il codice nel modello del widget sovrascritto. qualcosa come widget-blogarchives.cshtml, a seconda di ciò che stai cercando di fare (guarda le alternative disponibili nella tracciatura della forma per decidere quale vuoi, potresti voler aggiungere al widget la funzione alterna tra l'altro, per avere più possibilità). Non è possibile alternare i wrapper, quindi sovrascrivere il template del wrapper del widget lo sovrascriverà per tutti i widget. Probabilmente non è quello che vuoi. quindi sì, questo è un modo perfettamente ragionevole per fare le cose. –

+0

Sì, ho attivato la funzione alterna, quindi sostituisco Widgets-BlogArchives.cshtml. Non riuscivo a capire da dove provenisse l'intestazione perché non riuscivo a trovarla nello strumento di tracciamento della forma. – b3n

Problemi correlati