2011-10-24 17 views
9

Próbuję utworzyć motyw (przekształcić istniejący szablon) w Orchard, ale utknąłem podczas stylizowania widżetu Blog Archive. Mam "boczny pasek" strefy, w którym umieściłem widżet.Jak ustawić widżet w Orchard?

Aby mieć to wyjście znaczników Chcę stworzyłem nowy szablon w moich poglądów folderu: Widget-BlogArchives.cshtml cały szablon to owinąć treść widgetu w div tak:

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

Więc spodziewałem się, że cała zawartość widgetu będzie w moim div. Jednak wygenerowany HTML wygląda następująco:

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

Co nie rozumiem, skąd pochodzi całe opakowanie? Jak mogę uzyskać nagłówek w moim div i zmienić na?

Czy ktoś mógłby również wyjaśnić, gdzie w tytule zapisany jest tytuł "Archiwum"? Przejrzałem model w narzędziu śledzenia kształtu, ale nie mogłem go znaleźć ...

Dzięki.

UPDATE

Jak wyjaśnia Bertrand Zrobiłem kilka zmian do mojego 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> 

To teraz generuje HTML chcę.

Odpowiedz

4

Ten znacznik pochodzi z opakowania widgetu. Możliwe jest wyłączenie opakowania przez wywołanie metody Model.Metadata.Wrappers.Clear(). Możesz wtedy całkowicie przejąć renderowanie z własnego nadpisania widgetu.

Jeśli otworzysz widget.wrapper.cshtml, znajdziesz odpowiedzi na swoje pytanie drugie:

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

Jakie mogą być również wykonane w ten sposób:

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

dziękuję Bertrand. Gdzie powinienem umieścić kod, aby wyczyścić opakowania? A czy jest to zalecany sposób układania widżetów do stylizacji czy powinienem zastąpić opakowanie zamiast Widget-BlogArchives.cshtml? Wciąż próbuję zrozumieć wszystkie koncepcje tutaj i jakie są najlepsze praktyki. – b3n

+0

Możesz umieścić ten kod w szablonie nadpisania widgetu. coś podobnego do widget-blogarchives.cshtml, w zależności od tego, co próbujesz zrobić (spójrz na dostępne alternatywy w śledzeniu kształtów, aby zdecydować, który z nich chcesz, możesz chcieć dodać alternatywny element widżetu przy okazji, aby uzyskać więcej możliwości). Nie można zmieniać napakietów, więc nadpisanie szablonu opakowania widgetu zastąpiłoby go dla wszystkich widżetów. Prawdopodobnie nie tego chcesz. więc tak jest to całkowicie rozsądny sposób robienia rzeczy. –

+0

Tak, mam włączoną funkcję alternatywną, a więc przesłaniam Widgets-BlogArchives.cshtml. Nie mogłem pojąć, skąd pochodził nagłówek, ponieważ nie mogłem go znaleźć w narzędziu do śledzenia kształtu. – b3n