2014-01-14 3 views
0

Мне поручено преобразовать дизайн тяжелого, довольно продвинутого HTML-шаблона для сайта в тему Orchard, и я изо всех сил пытаюсь выполнить определенные вещи. Тема построена на бутстрапе и представляет собой современный отзывчивый HTML-шаблон, который можно найти на ThemeForest или что-то в этом роде. На сайте будет несколько типов контента (сотрудники, элементы портфеля, партнеры и т. Д.) И потребуется ряд шаблонов. Типы содержимого будут иметь большое количество полей (более десятка) внутри пользовательских частей контента.Advanced Orchard Theming - Объектная модель против Placement.info?

Основываясь на том, что я прочитал, правильный способ делать тематику в Orchard использует placement.info в сочетании с альтернативами, обертками и т. Д. Это изящно обрабатывает, если компоненты или свойства добавляются/удаляются. Однако этот метод быстро становится подавляющим, так как я должен объявлять имя и порядок каждого поля/части в place.info для каждого типа контента и каждого типа отображения этого типа контента. Каждое поле каждого типа содержимого затем должно быть обернуто в очень специфическом html. Это создает проблему, потому что одна страница может быть разделена на потенциально несколько десятков просмотров, причем теги HTML открываются в одном представлении и закрываются в другом.

Лучшая работа вокруг этого, которую я нашел, заключается в том, чтобы в основном игнорировать файл placement.info и создавать шаблоны только путем перемещения объектной модели. Поэтому в основном для страницы с портфолио я бы скопировал в HTML-код шаблона, а затем заменил текстовые значения на значения из модели. Это может выглядеть примерно так:

<li class="@Display(Model.ContentItem.PortfolioPart.PortfolioCore.Value.ToLower())"> 

    <a href="@Url.ItemDisplayUrl(contentItem)" > 


     @foreach (var media in Model.ContentItem.PortfolioPart.PortfolioImage.MediaParts) 
      { 
       <img src="@Display(media.MediaUrl)" /> 
      } 
        <span class="type">@Display(Model.ContentItem.PortfolioPart.PortfolioCoreArea.Value)</span> 
        <span class="portfolio-item-content"> 
         <span class="header">@Display(Model.ContentItem.TitlePart.Title)</span> 
         <span class="body"> 
          <p> 
           @Display(Model.ContentItem.PortfolioPart.PortfolioTagline.Value) 
          </p> 
         </span> 
        </span> 
    </a> 
</li> 

Преимущество этого метода заключается в том, что я могу применить все значения в пару взглядов, и это более читаемым. Очевидно, проблема заключается в том, что если какие-либо свойства или части удалены, шаблон прерывается.

Есть ли способ в Орчард, чтобы иметь лучшее из обоих миров? У меня не может быть обертки или шаблона для каждого поля - это может закончиться потенциально сотнями полей к концу. Мне также может потребоваться отображать типы контента в нескольких местах с разными представлениями - тогда для каждого поля потребуется весь новый набор оберток или альтернатив для каждой проекции.

Пожалуйста, дайте мне знать, если мне что-то не хватает или если есть лучший способ сделать это, кроме ручного перехода к свойствам, которые мне нужны. Мне нужен способ легко вставлять свойства в очень специфичный html.

Последняя мысль заключалась в том, чтобы использовать очень специфические шаблоны для пользовательских типов контента с использованием объектной модели, но при этом обеспечить хороший общий шаблон/файл placement.info, чтобы общий контент Orchard был гибким, но пользовательские типы контента должны оставаться такими, как они ,

Сторона мысли - я предполагаю, что другой вариант заключается в том, чтобы обернуть любой код, который обращается к свойству непосредственно в блок catch try или какой-то помощник обработчика ошибок, но это не похоже на «лучшую практику».

ответ

0

Я думаю, что методы в этой статье, что вы ищете: http://weblogs.asp.net/bleroy/archive/2013/02/13/easy-content-templates-for-orchard-take-2.aspx

+0

Привет Бертрана, Спасибо за ответ! Эта статья полезна, но можете ли вы подробнее рассказать о том, какое преимущество заключается в том, чтобы вводить часть контента в зону, а не просто обращаться к части или свойствам контента непосредственно из модели? Это потому, что, поскольку вы используете Placement.Info, он не сломается, если кто-то удалит эту часть? Если внутри зоны Orchard использует шаблон Content Part для прямого доступа к свойствам этой части, будет ли он по-прежнему прерываться, если менеджер контента удаляет свойства? Я надеюсь, что эти вопросы имеют смысл, ценят ваше время. –

+0

Вы можете получить доступ к свойствам напрямую, если хотите, статья действительно делает это. В статье подчеркивается, что техника дает вам лучшее из того и другого. –

Смежные вопросы