Использование альтернатив для Document.cshtml в Orchard CMS - PullRequest
3 голосов
/ 26 марта 2012

В настоящее время я работаю над веб-сайтом, которому требуется возможность перезаписать файл document.cshtml, чтобы я мог применить определенный CSS-класс на основе текущего местоположения пользователя.

Я пытался использовать альтернативы URL, такие как:

  • Document.cshtml
  • Document-url-AreaA.cshtml
  • Документ-URL-AreaB.cshtml
  • document.URL-AreaC.cshtml

однако, похоже, что все они используют Document.cshtml, а не один, основанный на URL. Я легко мог понять, что это целевое назначение, однако мне было интересно, можно ли реализовать описанные выше функции.


Обновление

Я полагаю, что, возможно, я добился определенного прогресса в этой области, в отличие от использования альтернатив URL и простого добавления поля в модели (для документа), чтобы просто перетащить текущую "область" сайта и применить это. класс для тела.

(В пределах document.cshtml)

@using Orchard.Mvc.Html;
@using Orchard.UI.Resources;
@{
    RegisterLink(new LinkEntry {Type = "image/x-icon", ...});

    string title = Convert.ToString(Model.Title);
    string siteName = Convert.ToString(WorkContext.CurrentSite.SiteName);

     //Pull the Area here
    string area = Model.DesignatedAreaField;
}
<!DOCTYPE html> 
<html lang="en" class="static @Html.ClassForPage()"> 
<head> 
    <meta charset="utf-8" />
    <title>@Html.Title(title, siteName)</title> 
    @Display(Model.Head)
</head> 
<body class='@area'>
//Body goes here
@Display(Model.Body)
@Display(Model.Tail)
</body>
</html>

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

Ответы [ 3 ]

7 голосов
/ 27 марта 2012

Document.cshtml - это оболочка для формы макета.Оболочки не поддерживают альтернативы.Единственный способ выборочно заменить шаблон document.cshtml - удалить существующую оболочку из коллекции оболочек с метаданными формы макета и добавить собственную.

Но подождите ... Я не могу вспомнитьлюбая веская причина, почему вы хотите это сделать.В файле document.cshtml находится стандартный HTML-код, который должен быть одинаковым на всем сайте.Решение, описанное в вашем обновлении, - это путь.

1 голос
/ 27 марта 2012

Вы также можете переместить тег <body> в Layout.cshtml, а затем использовать альтернативы URL-адреса Layout.cshtml для установки атрибута класса <body>'s.

0 голосов
/ 27 марта 2012

Возможно, вы захотите взглянуть на этот пост: http://weblogs.asp.net/bleroy/archive/2010/12/14/switching-the-layout-in-orchard-cms.aspx. В нем показано, как можно динамически добавлять собственные альтернативы, но тот же подход может работать для добавления свойств в модель или макет на основе геолокации.

Я думаю, вы можете определить некоторый код в OnResultExecuting () для динамического добавления свойства в класс Model.Поскольку он имеет динамический тип, вы можете просто установить его, ничего особенного не требуется.

...