가쓰 유키의 답을 바탕으로 모든 활성 레이어를 CSS 클래스로 변환하는 WorkContext 확장 메서드를 만들었습니다.
using Orchard;
using Orchard.Widgets.Services;
using System.Collections.Generic;
namespace KidsMinistryTeam.Theme.Extensions
{
static public class WorkContextExtensions
{
static public IList<string> GetLayerCssClasses(this WorkContext workContext)
{
var widgetsService = workContext.Resolve<IWidgetsService>();
var ruleManager = workContext.Resolve<IRuleManager>();
var classNames = new List<string>();
foreach (var layer in widgetsService.GetLayers())
{
try
{
if (ruleManager.Matches(layer.LayerRule))
{
classNames.Add(string.Format("{0}-layer", layer.Name.ToLower())); //add any additional class sanitizing logic here
}
}
catch
{
}
}
return classNames;
}
}
}
그런 다음 내 테마의 Layout.cshtml에서 Model.Classes에 추가하여 이제 활성 레이어를 기반으로 스타일을 지정할 수 있습니다.
foreach(string className in WorkContext.GetLayerCssClasses())
{
Model.Classes.Add(className);
}
답변은 정확하지만 레이어와 위젯에 대한 몇 가지 오해가있는 것 같습니다. 각 위젯이 하나의 계층에만 속하기 때문에 위젯에 대한보기 코드를 제외하면 "현재 계층"이 실제로 존재하지 않기 때문에 모든 요청에 대해 활성 계층이 여러 개있을 수 있습니다. 레이어는 본질적으로 위젯을 둘러싼 큰 if 구조와 같습니다. 따라서 레이어가 활성화되어 있는지 여부에 따라 물건을 만들고 싶다면 그냥 물건을 만드는 위젯을 만들고 그 레이어에 붙여야합니다. 꽤 마르코의 대답) –