2012-01-18 2 views
0

레이아웃 (테마) 내에서 subnav 링크를 별도로 표시하려고합니다.Orchard display subnav links를 별도로 표시합니다.

'루트'수준의 탐색 링크 만 표시하는 MenuItem.cshtml을 재정의했습니다. 하지만 이제는 Menu에 액세스하는 방법을 알아 내려고 노력 중입니다. Layout.cshtml의 Model에서 항목.

Menu.Items가 노출 될 모델은 무엇입니까?

예 : 제품 1.0, 제품 페이지를 볼 때 전자 1.1 난 당신이 정확히 무엇을 달성하고자하는 모른다 1.3

답변

0

가구 1.2 사무용품을 볼 것입니다

2.0을 지원하지만 당신은 Advanced Menu module을 살펴볼 것입니다 : 계층 적 메뉴와 메뉴 위젯을 사용하기 쉽고 레이아웃에 포함시켜 독립적 인 메뉴 나 하위 메뉴를 쉽게 표시 할 수 있습니다.

1

나는 Advanced Menu로 많은 행운이 없었다. 내가 사용하지 못하게하는 버그가있었습니다.

내가 찾은 내 솔루션은 예쁜 코드가 아닙니다 및 리팩토링 할 필요가 있지만 여기있다 : 나는 (두 번째 원하는 위치 은 내가 Layout.cshtml에 대한

코드 Model.Navigation 캐스팅 PartialView 렌더링 서브 메뉴 표시)
{Html.RenderPartial ("SubNavMenu"(는 IEnumerable) Model.Navigation)} @ PartialView

@model IEnumerable<dynamic> 

@{ 
    IEnumerable<dynamic> subNavLinks = null; 
    string requestUrl = Request.Path.Replace(Request.ApplicationPath, string.Empty).TrimEnd('/').ToUpperInvariant(); 
    IEnumerable<dynamic> children = Model.FirstOrDefault(x => x.MenuName == "main").Items; 
    var menuItems = children.Select(x => x.Item); 
    var parent = menuItems.FirstOrDefault(x => x.Text.TextHint.Equals(requestUrl, StringComparison.InvariantCultureIgnoreCase)); 
    if(parent!=null) 
    { 
     subNavLinks = menuItems.Where(x => x.Position.StartsWith(parent.Position.Substring(0,1)) && x.Position.Length>1); 
    } 
} 


<nav> 
    <ul class="subNav"> 
    @if (subNavLinks != null) 
    { 
     foreach (var item in subNavLinks) 
     { 
      <li><a class="@className" href="@item.Href">@item.Text</a></li> 
     } 
    } 
    </ul> 
</nav> 
+0

'VAR의 subNavLinks = 용의 메뉴 아이템에

코드 .Where (x => x.Position.StartsWith (parentPosition.Substring (0,1)) && x.Position.Length> 1);' – dave