Продвинутый Тематический сад - Объектная модель против Placement.info?

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

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

Лучшее решение этой проблемы, которое я нашел, заключается в том, чтобы в основном игнорировать файл place.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.

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

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

1 ответ

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

Другие вопросы по тегам