Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Templates Liferay高级导航_Templates_Navigation_Themes_Liferay_Velocity - Fatal编程技术网

Templates Liferay高级导航

Templates Liferay高级导航,templates,navigation,themes,liferay,velocity,Templates,Navigation,Themes,Liferay,Velocity,我试图通过制作自己的速度模板,在Liferay中创建一个有点非正统的导航。然而,我的标记似乎不起作用。以下是我想做的: 我想在4个不同的选项中进行主要选择。 对于每个选项,有两个级别的子菜单。 到目前为止,它应该足够简单。 但是,我希望主选项菜单与子菜单分开(主要是因为不同的部分或多或少是不同的站点) 这就是我想要的: <nav id="portal-choice"> <ul> <li class="selected">Option 1

我试图通过制作自己的速度模板,在Liferay中创建一个有点非正统的导航。然而,我的标记似乎不起作用。以下是我想做的:

我想在4个不同的选项中进行主要选择。 对于每个选项,有两个级别的子菜单。 到目前为止,它应该足够简单。 但是,我希望主选项菜单与子菜单分开(主要是因为不同的部分或多或少是不同的站点)

这就是我想要的:

<nav id="portal-choice">
    <ul>
        <li class="selected">Option 1</li>
        <li>Option 2</li>
        <li>Option 3</li>
        <li>Option 4</li>
    </ul>
</nav>

<nav id="main-nav">
    <ul>
        <li class="parent-menu">Child of selected
            <ul class="child-menu">
                <li>Grandchild of selected</li>
                <li>Grandchild of selected</li>
            </ul>
        </li>
        <li class="parent-menu">Child of selected
            <ul class="child-menu">
                <li>Grandchild of selected</li>
            </ul>
        </li>
        <li>Child of selected</li>
    </ul>
</nav>

    选项1
  • 选择2
  • 选择3
  • 选择4
  • 所选菜单的子菜单
    • 被选中的孙子
    • 被选中的孙子
  • 所选菜单的子菜单
    • 被选中的孙子
  • 选定的子对象
这就是我所尝试的:

<nav id="portal-choice">
    <ul>
        #foreach ($nav_item in $nav_items)
            #set ($navHasChildren = $nav_item.hasChildren())
            #set ($nav_item_class = "")

            #if ($nav_item.isSelected())
                <li class="selected">
            #else
                <li>
            #end
                    <a href="$nav_item.getURL()" $nav_item.getTarget()>$nav_item.icon() $nav_item.getName()</a>
                </li>
            #if ($nav_item.isSelected())
                    </ul>
                </nav>
                <nav class="$nav_css_class" id="main-nav" title='#language("navigation")'>
                    <ul>
                        #if ($navHasChildren)
                            #foreach ($nav_child in $nav_item.getChildren())
                                #set ($hasGrandChildren = $nav_child.hasChildren())
                                #set ($nav_child_class = "")

                                #if ($nav_child.isSelected() || $nav_child.isChildSelected())
                                    #set ($nav_child_class = "selected")
                                #end
                                #if ($hasGrandChildren)
                                    #set ($nav_child_class = ${nav_child_class} + " parent-menu")
                                #end

                                <li class="$nav_child_class">
                                    <a href="$nav_child.getURL()" class="nav-link" $nav_child.getTarget()><span class="navigation-item">$nav_child.icon() $nav_child.getName()</span></a>
                                    #if ($hasGrandChildren)
                                        <a href="#" class="toggle-menu"></a>
                                    #end

                                    #if ($hasGrandChildren)
                                        <ul class="child-menu">
                                            #foreach ($nav_grandchild in $nav_child.getChildren())
                                                #if ($nav_grandchild.isSelected())
                                                    <li class="selected">
                                                #else
                                                    <li>
                                                #end
                                                <a href="$nav_grandchild.getURL()" class="child-link" $nav_grandchild.getTarget()><span class="sub-navigation-item">$nav_grandchild.getName()</span></a>
                                                </li>
                                            #end
                                        </ul>
                                    #end
                                </li>
                            #end
                        #end
                    </ul>
                </nav>
            #else
                    </ul>
                </nav>
            #end
        #end

    #foreach($nav_项目中的nav_项目) #set($navHasChildren=$nav_item.hasChildren()) #套装($nav_item_class=”“) #如果($nav_item.isSelected())
  • #否则
  • #结束
  • #如果($nav_item.isSelected())
    #如果($navHasChildren) #foreach($nav_item.getChildren()中的$nav_child) #set($has孙子女=$nav_child.hasChildren()) #套装($nav_child_class=”“) #如果($nav_child.isSelected()| |$nav_child.isChildSelected()) #设置($nav\u child\u class=“选定”) #结束 #如果(有孙子女) #set($nav_child_class=${nav_child_class}+“父菜单”) #结束
  • #如果(有孙子女) #结束 #如果(有孙子女)
      #foreach($nav_child.getChildren()中的nav_孙子) #如果($nav_孙子.isSelected())
    • #否则
    • #结束
    • #结束
    #结束
  • #结束 #结束
#否则 #结束 #结束

帮助我欧比-万·克诺比你是我唯一的希望。

你最好在顶级导航中循环两次。一次仅用于构建单级
列表。然后,第二次,不要显示任何顶级的
,仅对于一个选定的顶级导航项,显示其所有子项,如您所愿

伪代码:

<nav id="portal-choice">
<ul>
    #foreach ($nav_item in $nav_items)
        #if ($nav_item.isSelected())
            <li class="selected">
        #else
            <li>
        #end
                <a href="$nav_item.getURL()" $nav_item.getTarget()>$nav_item.icon() $nav_item.getName()</a>
            </li>
    #end
</ul>
</nav>

<nav id="main-nav">
<ul>
    #foreach ($nav_item in $nav_items)
        #if ($nav_item.isSelected())
             #if ($navHasChildren)
                 #foreach ($nav_child in $nav_item.getChildren())
                     <li><!-- display any level of children --></li>
                 #end
             #end
         #end
    #end
</ul>
</nav>

    #foreach($nav_项目中的nav_项目) #如果($nav_item.isSelected())
  • #否则
  • #结束
  • #结束
    #foreach($nav_项目中的nav_项目) #如果($nav_item.isSelected()) #如果($navHasChildren) #foreach($nav_item.getChildren()中的$nav_child)
  • #结束 #结束 #结束 #结束
Velocity对于递归应用程序来说并不是很好,所以“显示任何级别的子级”可能包含一些重复的代码,用于所有要显示的嵌套级别。或者你创建了一个宏-无论如何,至少这会帮助你开始。关键是在导航中循环两次


另一种选择是利用“导航”Portlet,您可以将其配置为显示从级别“1”开始的所有页面,该级别将是当前顶级页面的子级。您只需将此portlet嵌入到主题中。

您可以再指定一点“未工作”吗?结果是什么?它的哪一部分不符合预期?很抱歉,在部署时似乎出错了。现在可以了。谢谢