2012-06-22 23 views
8

Questo mi farà impazzire a questo ritmo. Dall'interno di un file Layout.cshtml per un tema in Orchard, come posso determinare il titolo dei contenuti del corpo principale?Orchard - Ottenere il titolo del contenuto dal tema del layout

Ho provato a utilizzare lo Shape Tracer ma non sembra essere di aiuto. Nessuno di questi mi dà alcun testo.

@Html.Title() 
@Model.Title     
@Model.Content.Parts_Common_Body.ContentItem.TitlePart 
@Model.ContentItem.Parts_Common_Body.ContentItem.TitlePart 

UPDATE: Ecco il codice HTML che dovrebbe mostrare ciò che il risultato finale ha bisogno di guardare come a mantenere intatto il tema, insieme ad una foto che mostra il tema prima ho iniziato con esso. Questo HTML è solo un frammento delle parti che mi interessano. Nell'immagine, la ricerca è ciò che si trova nella zona ContentHeader.

<div id="wrapper-header-inner"> 
     <div id="header-inner"> 
     @Zone(Model.ContentHeader) 
     <h1 class="pagetitle"> 
      Title Here 
     </h1> 
     </div><!-- #header-inner --> 
</div><!-- #wrapper-header-inner --> 
} 


<div id="wrapper-content"> 
    <div id="content"> 
     @if(Model.Content != null) { 
     <div class="main" class="@mainContentClass"> 
      @if(Model.Content != null && Model.LeftAside == null && Model.RightAside == null) { 
       <div id="maincontentFull" class="positionleft"> 
        @Zone(Model.Content) 
       </div> 
      } 
      @* Other layout possabilities if left and/or right asides are present *@ 
     </div> 
     } 
    </div> 
</div> 

Snapshot of the resulting layout

risposta

4

Come follow-up, gli aggiornamenti a Orchard poiché ho posto questa domanda includevano la possibilità di utilizzare il file placement.info per reindirizzare determinate parti ad altre zone, in effetti permettendomi di realizzare ciò che stavo cercando.

<Placement> 
    <Match ContentType="Page"> 
    <Place Parts_Title="/TitleZone"/> 
    </Match> 
</Placement> 
0

fa questo lavoro per voi?

@Html.Title() 

Questo dovrebbe funzionare se stai cercando il titolo della pagina. Tuttavia, se stai cercando di accedere direttamente al titlePart ...

@Model.Title 

Questo funziona perché se si guarda nel modello Parts.Title c'è una riga di codice che fa questo ...

@{ 
    Layout.Title = Model.Title; 
} 
+3

Nessuno di quelli mi dà il titolo. Non sembrano nemmeno avere un output, immagino che siano oggetti SharpClay. Che bello come sono per la flessibilità, sono DAVVERO fastidioso per cercare di rintracciare quali proprietà/metodi esistono realmente. È come sparare in aria in modo casuale e in attesa di vedere se un uccello cade dal cielo. –

+0

Ya, ha i suoi compromessi. Sono con Bertrand su questo però, cosa stai cercando di fare? Sembra un po 'indietro. –

+0

Beh, in sostanza ho un tema che sto cercando di implementare. E il tema su cui sto lavorando mette un div più in alto sul DOM della pagina che contiene il titolo della pagina. Ma poiché si trova in una posizione diversa rispetto al contenuto della pagina principale, non so come posizionare il titolo lì perché non sarà una zona locale nella zona del contenuto, se ciò ha senso? Aggiornerò la domanda con un esempio di HTML in un minuto ... –

2

Da Layout, Modello è l'oggetto Layout. Non ha nulla a che fare con qualsiasi contenuto verrà sottoposto a rendering nella zona Contenuto, ma ha una proprietà Title che dovrebbe essere impostata da quel contenuto. Non è esattamente quello che stai chiedendo: è quello che finirà per essere il titolo HTML.

Se si desidera ottenere il titolo dell'articolo che viene sottoposto a rendering nella zona di contenuto di livello superiore, beh, Layout non è davvero un buon posto per cercarlo. Avrei bisogno di sapere di più su cosa esattamente stai cercando di ottenere, ma questo sembra all'indietro. In realtà, non si può nemmeno presumere che ci sia uno di questi contenuti, o che ce ne sarà solo uno.

Quindi cosa stai cercando di fare esattamente?

Problemi correlati