2013-02-19 53 views
4
  • 我在navigation.vm文件中定義了一個在liferay項目中運行良好的菜單。
  • 但我想從我的portlet訪問此菜單。
  • 有什麼辦法從portlet入口點或view.jsp訪問菜單嗎?

回答

0

這個link描述了直接在jsp中獲取菜單項的方法。

下面的代碼是直接從一些改進格式上面的鏈接複製:

<%@ taglib uri="http://liferay.com/tld/theme" prefix="liferay-theme" %> 
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %> 

<%@ page import="java.util.List" %> 
<%@ page import="java.util.ArrayList" %> 
<%@ page import="com.liferay.portal.model.Layout"%> 
<%@ page import="com.liferay.portal.kernel.util.WebKeys"%> 
<%@ page import="com.liferay.portal.theme.NavItem" %> 
<%@ page import="com.liferay.portal.theme.RequestVars" %> 
<%@ page import="com.liferay.portal.theme.ThemeDisplay"%> 

<portlet:defineObjects /> 

<liferay-theme:defineObjects /> 

<div style="width:100%"> 
<% 
//ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY); 

String title = themeDisplay.getLayout().getName(themeDisplay.getLocale()); 

List<NavItem> navItems = new ArrayList<NavItem>(); 

if (layout != null) { 
    RequestVars requestVars = new RequestVars(request, themeDisplay, layout.getAncestorPlid(), layout.getAncestorLayoutId()); 
    navItems = NavItem.fromLayouts(requestVars, layouts); 
} 

for (NavItem navItem : navItems) { 
    if (navItem.getName().equalsIgnoreCase(title)) { 
     if (navItem.hasChildren()) { 

      for(NavItem navChild : navItem.getChildren()) { 
%> 

    <div style="float:left;" class="newsMenuPortlet"> 
     <a href="<%= navChild.getURL() %>" <%=navChild.getTarget() %>> 
      <%= navChild.getName() %> 
     </a> 
    </div> 

<% 
      } // inner for-loop ends here 
     } 
    } 
}// outer for-loop ends here 
%> 

</div> 
+0

感謝它也可以 – 2013-02-20 08:44:43

+1

我得到了所有菜單和子菜單,但我怎麼弄圖標。像:navClind.icon(); – 2013-02-20 10:12:56

1

進口liferay-ui的taglib:

<%@ taglib uri="http://liferay.com/tld/ui" prefix="liferay-ui" %> 

那麼你可以使用

<liferay-ui:navigation displayStyle="from-level-0" > 
</liferay-ui:navigation> 

注:設置displayStyle="from-level-0"給你正常的行爲就像navigation.vm,你可以用屬性不同的發揮得到其他行爲。