Как оформить виджет в саду? - PullRequest
       32

Как оформить виджет в саду?

9 голосов
/ 24 октября 2011

Я пытаюсь создать тему (преобразовать существующий шаблон) в Orchard, но я застрял при стилизации виджета «Архивы блога».У меня есть зона "боковой панели", в которой я разместил виджет.

Чтобы он вывел нужную разметку, я создал новый шаблон в своей папке представлений: Widget-BlogArchives.cshtml Весь шаблон выполняет обтекание содержимого виджета в div следующим образом:

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

Итак, я ожидал, что все содержимое виджета будет внутри моего div.Однако сгенерированный HTML выглядит следующим образом:

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

Что я не понимаю, откуда взялась вся упаковка статьи?Как я могу получить заголовок в мой div и изменить на?

Может ли кто-нибудь также объяснить, где в модели хранится заголовок "Архивы"?Я просмотрел модель в инструменте трассировки фигур, но не смог ее найти ...

Спасибо.

ОБНОВЛЕНИЕ

Как объяснил мне Бертран, явнес некоторые изменения в мой 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>

Теперь генерируется нужный мне HTML-код.

1 Ответ

4 голосов
/ 24 октября 2011

Эта разметка взята из оболочки виджетов. Можно подавить оболочку, вызвав Model.Metadata.Wrappers.Clear (). После этого вы можете полностью перенести рендеринг из собственного переопределения виджета.

Если вы откроете widget.wrapper.cshtml, вы найдете ответ на второй вопрос:

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

Что также можно сделать следующим образом:

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