Ich arbeite derzeit an einer Website, die die Datei document.cshtml überschreiben muss, damit ich eine bestimmte CSS-Klasse basierend auf dem aktuellen Standort des Benutzers anwenden kann.Verwenden von Alternativen für Document.cshtml in Orchard CMS
Ich habe versucht, URL Alternativen zu verwenden, wie zum Beispiel:
- Document.cshtml
- Document-url-AreaA.cshtml
- Document-url-AreaB.cshtml
- Dokument.url-AreaC.shtml
es scheint jedoch, dass alle von ihnen die Document.cshtml im Gegensatz zu einer basierend auf der URL verwenden. Ich könnte leicht verstehen, dass dies der beabsichtigte Zweck ist, aber ich frage mich, ob es möglich wäre, die obige Funktionalität zu implementieren.
aktualisiert
Ich glaube, dass ich in diesem Bereich einige Fortschritte gemacht haben kann, im Gegensatz zu URL Alternativen verwenden und einfach ein Feld auf dem Modell hinzugefügt (für das Dokument), einfach die aktuellen zu ziehen "Area" der Site und wenden Sie diese Klasse auf den Körper an.
(Innerhalb 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>
Ich glaube, dass dies eine einfachere Lösung als die zuvor vorgeschlagen. Ich frage mich jedoch, was die einfachste Methode ist, ein Feld zu platzieren, auf das ich vom Modell des Dokuments aus zugreifen könnte.
Danke Bertrand. Ich habe mehrere Versuche unternommen, den oben genannten "Bereich" zu setzen, aber ich konnte ihn nicht zur Arbeit bringen. Gibt es etwas, das ich vermissen könnte? Ich habe der Seite ein Inhaltsfeld hinzugefügt und versucht, es als Layout.FeldName festzulegen, und habe versucht, darauf zuzugreifen, indem ich string = Layout verwendete.Feldname, konnte jedoch nicht darauf zugreifen. Irgendwelche Vorschläge? –
Richtig, '@ Bereich' wird es nicht schneiden. '@ Model.FieldName' würde funktionieren, wenn Sie' Layout.FieldName = "something" 'von woanders setzen. –