Antecedentes: quiero evitar crear un diseño alternativo para mi página de inicio y me gustaría mantener el "The Theme" Machine "zonas y diseño junto a intacto, y en realidad" tema "la mayoría de todo usando CSS puro. Por lo tanto, debo dirigir selectivamente CSS a "páginas" específicas, incluida, y lo más importante, la página de inicio. La forma más sencilla de hacer eso sería agregar una clase al "div" del envoltorio de diseño que envuelve todo el diseño. Podría agregar una clase al elemento "cuerpo" anulando el archivo Document.cshtml, pero realmente creo que es más sencillo trabajar dentro del archivo Layout.chstml y aprovechar las Model.Classes para agregar las clases CSS necesarias al etiqueta de "apertura".Cómo agregar una clase a layout-wrapper en Orchard CMS basado en la página actual y/o página de inicio
estoy actualmente haciendo algo como esto:
string area = Model.DesignatedAreaField;
Model.Classes.Add(string.IsNullOrWhiteSpace(area) ? "home" : area);
Model.Id = "layout-wrapper";
var tag = Tag(Model, "div"); // using Tag so the layout div gets the classes, id and other attributes added to the Model
Sé que el Area no se corte, debido a que la página de inicio y otras páginas están todos en la misma área, y Model.DesignatedAreaField realidad devuelve un vacío cadena para la página de inicio u otras páginas. Así que, al final, el código anterior generará SIEMPRE el siguiente marcado (que estoy mostrando los 3 tripels en la página principal):
<div class="home tripel-123" id="layout-wrapper">
Me gustaría ser capaz de añadir la "casa" única clase CSS cuando se muestra la página de inicio. Algunos pseudo-código sería el siguiente:
string wrapperCss = IsHomepage ? 'home' : Model.GetUrlPathOrSomethingUniqueForThePath();
Model.Classes.Add(wrapperCss);
Esto me permitirá, por ejemplo, hacer que el contenido principal de reducir el tamaño y flotan hacia la derecha, y la puso a los tripels a su izquierda (que es la forma en que el diseño de la página de inicio debería parecer, pero no quiero escribir un diseño completamente diferente para el hogar si pudiera hacer lo mismo con CSS simple y específico).
ACTUALIZACIÓN: El cableado hasta la respuesta de Bertrand
respuesta de Bertrand me permitió añadir una clase a la DIV envoltura dependiendo de la URL. No mencionó que (ya Orchard es una segunda naturaleza para él :-) pero tendrá que añadir un incluirse en el archivo Layout.cshtml y cambiar "mi" código en consecuencia:
@using Orchard.Utility.Extensions;
{
/* omitted for brevity, everything in between is the same as in the Theme's Machine layout file */
string area = WorkContext.HttpContext.Request.Path.HtmlClassify();
area = string.IsNullOrWhiteSpace(area) ? "home" : area;
Model.Classes.Add("url-" + area);
El resultado es la siguiente clase se añade a la div que encierra:
1) Cuando la página se muestra:
<div class="url-orchard-local- tripel-123" id="layout-wrapper">
2) Cuando una página llamada, recibirá los productos mostrados:
<div class="url-orchard-local-products" id="layout-wrapper">
Mi URL se lee como esto en mi máquina dev, se ejecuta dentro de servidor web de Visual Studio:
http://localhost:30320/OrchardLocal/ or
http://localhost:30320/OrchardLocal/Products
no estoy apostando mi vida, pero creo firmemente que la parte "OrchardLocal" va a cambiar en la producción una vez que se se publica, permítanme decir, a los servidores de Azure ...Así que he preemptivelly cambiar el código para esto:
string area = WorkContext.HttpContext.Request.Path.HtmlClassify();
if (area.LastOrDefault() == '-') {
area = "home";
}
Model.Classes.Add("url-" + area);
lo que se traduce en esta clase cuando la "página de inicio" se muestra:
<div class="url-home tripel-123" id="layout-wrapper">
(En realidad, yo he hecho el código por encima de un uno liner abusing algunos ternarios mezclados con operadores lambda :-)
Estoy inferir que la única vez que HtmlClassify devolverá una "clase" que termina con '-' es cuando es la página de inicio ... O la "raíz" para el sitio ... ¡Puedo estar equivocado! :-)
(De todos modos yo soy amante de la huerta más que cualquier cosa que he usado en el último par de años que no sean NHibernate, pero, bueno, Orchard utiliza también! Perfecto!)
Cambié la primera línea a string area = WorkContext.HttpContext.Request.Path.Substring (1) .HtmlClassify(); Creo que puede haber incluido el corte inicial, así que fue obtener una doble carrera después de la url – George