1

通常liferay具有ADD显示可用 portlet 的选项。

我希望它们出现在下拉列表中,并且应该在自定义插件 portlet 中,所以我在 API 中搜索哪个方法正在检索可用的 portlet,但我没有找到。

请帮助我,因为我坚持这一点,并且从下拉列表中选择应该将 portlet 添加到页面中。

4

1 回答 1

1

“添加...更多”对话框由停靠栏 portlet 显示。你可以在 Liferay 的源码中找到这部分 UI 部分的实现,该源码portal-web/docroot/html/portlet/dockbar/add_panel.jsp也包含view_category.jsp在同一目录中。

虽然这个 jsp 代码不是最漂亮的,但您会很容易发现它PortletLocalService是您找到相关信息的地方,以及如何按类别访问 portlet 列表的实际示例,根据当前用户的区域设置对它们进行排序等.

当您要求更具体的指针时:add_panel.jsp您可以找到:

for (PortletCategory curPortletCategory : categories) {
    if (curPortletCategory.isHidden()) {
        continue;
    }
    request.setAttribute(WebKeys.PORTLET_CATEGORY, curPortletCategory);
    request.setAttribute(WebKeys.PORTLET_CATEGORY_INDEX, String.valueOf(portletCategoryIndex));
    %>
    <liferay-util:include page="/html/portlet/dockbar/view_category.jsp" />
    <%
    portletCategoryIndex++;
}
%>

和一些摘录view_category.jsp

<%
PortletCategory portletCategory = (PortletCategory)request.getAttribute(WebKeys.PORTLET_CATEGORY);
int portletCategoryIndex = GetterUtil.getInteger((String)request.getAttribute(WebKeys.PORTLET_CATEGORY_INDEX));
// ...
Set<String> portletIds = portletCategory.getPortletIds();
// ...
for (String portletId : portletIds) {
    Portlet portlet = PortletLocalServiceUtil.getPortletById(user.getCompanyId(), portletId);

    if ((portlet != null) && PortletPermissionUtil.contains(permissionChecker, layout, portlet, ActionKeys.ADD_TO_PAGE)) {
        portlets.add(portlet);
        // ... and so on

希望这段摘录有所帮助。请参阅文件的其余部分,了解您可以对结果列表实际执行的操作。此外,如果您需要更多详细信息, Portlet的界面可能会有所帮助。

于 2013-04-29T08:26:10.653 回答