2010-09-10 25 views
1

(Je pense que cela vient de appfuse, de toute façon. Je ne suis pas toujours clair sur ce qui est une partie de ce qui cadre encore.)Comment afficher uniquement les éléments du menu enfant à appfuse

J'ai dans mon menu-config.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<MenuConfig> 
    <Displayers> 
     <Displayer name="Velocity" type="net.sf.navigator.displayer.VelocityMenuDisplayer"/> 
    </Displayers> 
    <Menus> 
     <Menu name="MainMenu" title="mainMenu.title" page="/mainmenu"> 
      <Item name="Foo" title="menu.foo" page="/foo"/> 
      <Item name="Bar" title="menu.bar" page="/bar"/> 
      <Item name="Baz" title="menu.baz" page="/baz"/> 
     </Menu> 
     <Menu name="OtherMenu" title="otherMenu.title" page="/othermenu"> 
      <Item name="Squee" title="menu.squee" page="/squee"/> 
      <Item name="Lorem" title="menu.lorem" page="/lorem"/> 
     </Menu> 
     <Menu name="UserMenu" title="menu.user" description="User Menu" page="mainmenu.editprofile" roles="ROLE_ADMIN,ROLE_USER"/> 
     <Menu name="Logout" title="user.logout" page="/logout" roles="ROLE_ADMIN,ROLE_USER"/> 
    </Menus> 
</MenuConfig> 

Pour ma navigation principale, j'ai dans mon menu.jsp:

<%@ include file="/common/taglibs.jsp"%> 

<menu:useMenuDisplayer name="Velocity" config="cssHorizontalMenu.vm" permissions="rolesAdapter"> 
<ul class="tabs menuList"> 
    <menu:displayMenu name="MainMenu"/> 
</ul> 
</menu:useMenuDisplayer> 

qui fonctionne à peu près, sauf que je reçois à la fois le haut niveau et articles de l'enfant le menu principal dans mon ou tput. En fait, je ne veux que les articles de l'enfant, i.e. .:

<ul> 
    <li>Foo</li> 
    <li>Bar</li> 
    <li>Baz</li> 
</ul> 

pas

<ul> 
    <li>Main Menu</li> 
    <li> 
    <ul> 
     <li>Foo</li> 
     <li>Bar</li> 
     <li>Baz</li> 
    </ul> 
    </li> 
</ul> 

Est-il possible de le faire?

Répondre

1

si tard, mais je l'espère, aider à quelqu'un ...

Avez-vous besoin regarder dans votre cssHorizontalMenu.vm, il fait le travail de génération de la sortie HTML. Si avez-vous un .vm

Peut-être que vous avez quelque chose comme ceci:

#macro(displayCssMenu $menu) 
    #if ($displayer.isAllowed($menu)) 
    #set ($count = $count + 1) 
    ## set menu title 
    #set ($title = $displayer.getMessage($menu.title)) 
    #if (!$menu.url) #set ($url="javascript:void(0)") #else #set ($url=$menu.url) #end 

    ## create a single menu item 
    #set ($itemClass = "") 
    #if (!$menu.parent) 
     #set ($itemClass = "mainItem") 
    #end 
    #set ($img = "") 
    #if ($menu.image) 
     #set ($img = "<img alt='$menu.image' class='icon setImageMenu $menu.image'/>") 
    #end 
    #if ($menu.components.size() == 0) 
     #if ($count == $renderedChildren) 
      <li class="last"> 
     #else 
      <li> 
     #end 
     #if ($menu.name == $currentMenu) 
      <a href="$url" title="$title" class="current $itemClass" #if($menu.target)target="$menu.target" #end#if($menu.width)style="width: ${menu.width}px"#end>$img ${title}</a> 
     #else 
      <a href="$url" title="$title" class="$itemClass" #if($menu.target)target="$menu.target" #end#if($menu.width)style="width: ${menu.width}px"#end>$img ${title}</a> 
     #end 
    #else ## create multiple menu items in a menu 
     #if ($menu.components.size() > 0) 
      #set ($hasViewableChildren = false) 
      #set ($renderedChildren = 0) 
      #foreach ($menuIt in $menu.components) 
       #if ($displayer.isAllowed($menuIt)) 
        #set($hasViewableChildren = true) 
        #set($renderedChildren = $renderedChildren + 1) 
       #end 
      #end 
     #end 

     <li#if ($hasViewableChildren) class="menubar"#end> 
      <a href="$url" title="$title" #if ($menu.name == $currentMenu) class="current $itemClass" #else class="$itemClass" #end#if($menu.target)target="$menu.target" #end#if($menu.width)style="width: ${menu.width}px"#end>$img ${title}</a> 
    #end 

    #if ($menu.components.size() > 0) 
     #if ($hasViewableChildren) 
      <ul> 
     #end 

     #set ($count = 0) 
     #foreach ($menuIt in $menu.components) 
      #displayCssMenu($menuIt) 
     #end 

     #if ($hasViewableChildren && ($count == $renderedChildren)) 
      </li> 
     #else 
      </ul> 
      #if ($count > $renderedChildren) 
      </li> 
      #end 
     #end 
    #else 
     </li> 
     #if ($count == $menu.parent.components.size()) 
     </ul> 
     #end 
    #end 
    #end 
#end 

#displayCssMenu($menu) 

alors vous pouvez essayer de le faire ... (cherchez l'#if (menu.parent de $))

#if ($menu.components.size() == 0 && $menu.parent) 
     #if ($count == $renderedChildren) 
      <li class="last"> 
     #else 
      <li> 
     #end 
     bla.. bla... 

     bla.. bla... 
    #end 

    #if ($menu.components.size() > 0) 
     #if ($hasViewableChildren) 
      <ul> 
     #end 

     bla.. bla... 
    #else 
     #if ($menu.parent) 
      </li> 
     #end 
     #if ($count == $menu.parent.components.size()) 
      </ul> 
     #end 
    #end 

cette éviter d'imprimer les éléments LI pour le menu parent, et imprime uniquement les éléments des objets ...

Questions connexes