Можно ли использовать бритвенные макеты с Orchard CMS и обойти тематику

Немного контекста

У нас есть недавнее веб-приложение MVC4, используемое многими людьми, которое мы хотели бы перенести в Orchard CMS. Несмотря на то, что это приложение типа «администратор», мы не хотим, чтобы оно было частью административного раздела Orchard. Это приложение в настоящее время работает, и мы хотели бы, чтобы переход на Orchard был как можно более незаметным для конечного пользователя.

Где мы сейчас

Мы следовали этому ответу, как интегрировать существующее приложение ASP.NET MVC с Orchard CMS, но мы используем макеты (Razor, а не Orchard), и оно не работает (по умолчанию) с тем, как Orchard отображает страницы (представления, возвращаемые действиями контроллеров, отображаются без макетов - _ViewStart.cshtml игнорируется). Я попытался указать путь макета в методе View, но он не работает или путь не подходит, так как мы находимся в модуле. Есть ли способ указать Orchard использовать файл _layout.cshtml и обойти тему Orchard?


person W3Max    schedule 11.03.2013    source источник
comment
Я не думаю, что ты сможешь это сделать. Вынужден спросить: если нулевая интеграция с Orchard, то какой смысл?   -  person Bertrand Le Roy    schedule 12.03.2013
comment
@BertrandLeRoy При всем уважении, я не думаю, что неиспользование функциональности тем и использование всех других функций Orchard (управление контентом, управление версиями, IoC, модульность и т. д.) можно квалифицировать как нулевую интеграцию, но я понимаю вашу озабоченность. Кроме того, это одно приложение среди многих других, а некоторые другие могут быть созданы в административной части Orchard более традиционным способом. Мы хотели бы, чтобы наши данные постоянно сохранялись в Orchard. Я нашел этот пост на Codeplex orchard.codeplex.com/discussions/396365, может ли он быть частью решения?   -  person W3Max    schedule 12.03.2013
comment
У меня такой информации не было, поэтому и спросил. То, что я предлагал в этом посте, и то, что я собираюсь предложить и в вашем случае, — это принять систему тем Orchard и заставить ее работать на вас. Это не так уж отличается от макетов Razor (которые не случайно были указаны бывшим членом команды Orchard после того, как Orchard создал свой движок тем). Преобразование вашего _layout.cshtml в альтернативный макет layout.cshtml не должно быть слишком сложным, и любое действие и представление могут указать, какой альтернативный макет он хочет использовать. Дайте мне знать, если вам нужна помощь с этим   -  person Bertrand Le Roy    schedule 12.03.2013
comment
@BertrandLeRoy Спасибо за помощь! Просто из любопытства, раздел администратора Orchard (панель инструментов) построен с темами? Можно ли повторно использовать функции форм (сгенерированные формы), которые используются на панели инструментов, за пределами раздела администратора?   -  person W3Max    schedule 13.03.2013
comment
Да, администратор использует ту же инфраструктуру темы, но тема администратора имеет более высокий приоритет, чем обычные темы. Функция пользовательских форм позволяет отображать формы во внешнем интерфейсе.   -  person Bertrand Le Roy    schedule 13.03.2013
comment
@BertrandLeRoy Еще раз спасибо за вашу помощь, это очень ценно!   -  person W3Max    schedule 13.03.2013


Ответы (2)


Темы Orchard можно обойти. Обратите внимание, что я делаю это с помощью MvcMailer, поэтому выводимое электронное письмо представляет собой «шаблон» HTML с макетом. Я не могу однозначно сказать, что это работает на обычных страницах, но вы можете попробовать. Просто шлепните это в своем представлении:

@inherits System.Web.Mvc.WebViewPage<object>
@{
  Layout = "_Layout.cshtml";
}

Предупреждение: вы не можете использовать более новую директиву @model. Я просто возвращаюсь к старому стилю и помещаю свою модель туда, где находится «объект»:

@using Namesapce.ViewModels
@inherits System.Web.Mvc.WebViewPage<MyViewModel>

В противном случае довольно просто создать тему и переопределить любую из форм Orchard. Я делаю это двумя способами:

  1. Создайте простую тему, переопределите формы (скажем, вам нужен другой логин, просто создайте файл Login.cshtml в папке темы ~/View), используйте альтернативы (используйте Layout-homepage.cshtml, чтобы переопределить макет домашней страницы), создайте файл . css и др.;
  2. Используйте пару приемов, чтобы переопределить тему с помощью кода из модуля и создать свои собственные представления и формы в папке темы. Например, в вашей теме может быть файл Layout.cshtml с кодом, отображающим фигуру. Однако сама фигура (файл .cshtml) живет в вашем модуле, что отлично подходит для использования темы типа панели мониторинга, которая вызывает фигуру с одинаковым именем в разных модулях, но показывает разное содержимое. Код для этого немного более глубокий. Просто спросите, нужны ли вам образцы.
person REMESQ    schedule 04.04.2013
comment
+1 хорошая альтернатива помогает с моей проблемой изменения макета для одного модуля. Я не подумал о варианте переопределения. Спасибо - person winner_joiner; 09.04.2013
comment
Еще одно предостережение: использование @inherits предотвращает использование @Display в представлении. - person REMESQ; 09.04.2013
comment
@REMESQ, спасибо, сработало. Но как вы ссылаетесь на скрипты и css из одного и того же модуля? На новой странице макета ссылки ищутся в папке темы сада! - person Rahatur; 23.06.2013
comment
@Rahat Хм, к сожалению, поскольку я использовал этот код для создания электронных писем (и из-за различных способов работы почтовых клиентов, например, Outlook v. GMail или чего-то еще), мне пришлось К сожалению, сделать все мои стили INLINE (например, ‹p style=...›, ‹td style=...›, ‹div style=... и т. д.). Если, ОДНАКО, вы не отправляете электронные письма по шаблону, то должно быть довольно просто ссылаться на скрипты и css в вашем layout.cshmtl или document.cshtml. Дайте мне знать, что именно вам нужно, и я постараюсь помочь. - person REMESQ; 25.06.2013
comment
@Rahat Всего несколько примеров нешаблонной электронной почты css и ссылок на скрипты в Orchard CMS. 1) В вашем файле css, если у вас есть подтема, ссылающаяся на основную тему, вы должны поместить это вверху вашего файла css: @import url('../../BaseTheme/Styles/Site.css');; и 2) если вы хотите ссылаться на css или скрипты в другой папке, то в вашем layout.cshtml для Orchard попробуйте следующее: RegisterLink(new Orchard.UI.Resources.LinkEntry { Rel = "stylesheet", Type = "text/css", Href = Href("../Scripts/tabs/tabs-style2.css") });. Последний ссылается на файл css, которого нет в ~/ThemeName/Styles. - person REMESQ; 25.06.2013
comment
@REMESQ, спасибо. Я нашел другой обходной путь. Мы также можем написать так: ‹link href=~/Modules/ModuleName/Styles/Site.css rel=stylesheet type=text/css /›. А для тегов img в html можно написать так: ‹img alt= src=~/Modules/ModuleName/Styles/images/logo.jpg /› - person Rahatur; 25.06.2013

tl;dr Нет, это невозможно.

Я не люблю отвечать на свои вопросы, но поскольку Бертран Ле Руа прокомментировал мой вопрос вместо того, чтобы ответить на него (никаких обид), и он является частью (или был?) командой Orchard, я буду отвечать тем, что знаю, пока кто-нибудь приходит с лучшим ответом.

Насколько я понимаю, быть частью проекта Orchard означает принять его полностью, между ними нет ничего промежуточного. Пользовательский механизм просмотра (Orchard) (который работает с зонами, макетами, виджетами, формами и т. д.) нельзя обойти (возврат к механизму MVC по умолчанию) в модуле. Как предложил Бертран, я должен преобразовать свой проект в тематику Orchard.

person W3Max    schedule 13.03.2013