2015-11-02 46 views
0

我有两个菜单通过认证状态(无论用户是否已登录)在Orchard中有条件呈现。Orchard菜单项呈现:需要不同html类的两个不同菜单

我遇到的挑战是如何在html级别控制每个菜单的渲染。对于不同的CSS设计,每个菜单都有不同的html结构和不同的类。

目前这两个菜单都使用相同的menu.cshtml和MenuItem.cshtml文件,它们位于主题的根文件夹中。

单独控制每个特定菜单的html类和结构的最佳方法是什么?

菜单1:

​​

菜单2:

<!--Main Menu HTML Code--> 
          <div class="public-nav"> 
           <nav class="wsmenu slideLeft clearfix"> 
            <ul class="mobile-sub wsmenu-list"> 
             <li> 
              <a href="">ABOUT</a> 
              <ul class="wsmenu-submenu"> 
               <li><a href="#"></i>DIFFERENT</a></li> 
               <li><a href="#"></i>PRACTICE</a></li> 
               <li><a href="#"></i>POOLS</a></li> 
               <li><a href="#"></i>MEMBERSHIP OVERVIEW</a></li> 
               <li><a href="#"></i>MAPS</a></li> 
               <li><a href="#"></i>PARK MANAGEMENT</a></li> 
              </ul> 
             </li> 
             </ul> 
             </nav> 

回答

0

他们每个人给的唯一的额外类的导航标记,以便您可以控制它们。 像:

<nav class="wsmenu menu_1 slideLeft clearfix"> 
<nav class="wsmenu menu_2 slideLeft clearfix"> 
+0

,对CSS的作品。但是,这个问题涉及通过Orchard替代文件控制html类属性值。 这意味着我必须基于某种条件自定义MenuItem.cshtml, Menu.cshtml和MenuItemLink.cshtml。这正是我想弄明白的。 如何将区域或形状与这些特定文件集的副本相关联。 – lowfi2dev

+0

换句话说....我有2个菜单。 如何将一个菜单关联到备用/形状,将第二个菜单关联到另一个备用/形状文件。 – lowfi2dev

1

您应该实现IShapeTableProvider(它有一个单一的方法)。 在这种方法中,你可以添加任何形状的交替。

对于使用方法内的服务,你应该通过ctor注入它,可能包装在工作类。

public class SomeShapeTableProvider : IShapeTableProvider 
{ 
    private readonly Work<IAuthenticationService> _authenticationService; 

    public SomeShapeTableProvider(Work<IAuthenticationService> authenticationService) { 
     _authenticationService = authenticationService; 
    } 

    public void Discover(ShapeTableBuilder builder) 
    { 
     // add alternates 
    } 
} 

那么你应该imlement Discover方法是这样的:

public void Discover(ShapeTableBuilder builder) 
{ 
    builder.Describe("MenuItem") 
     .OnDisplaying(displaying => { 
      if(_authenticationService.Value.GetAuthenticatedUser() != null) 
       displaying.Shape.Metadata.Alternates.Add("MenuItem__Authenticated"); 
     }); 
} 

然后你就可以使用不同形状的认证用户MenuItem-Authenticated.cshtml

相关问题