Liferay 如何以编程方式指向DAM显示portlet的根文件夹

Liferay 如何以编程方式指向DAM显示portlet的根文件夹,liferay,liferay-6,liferay-7,Liferay,Liferay 6,Liferay 7,如何通过programmatically.PFA image将其中一个文件夹设置为文档和媒体显示portlet的根文件夹 Liferay主要版本 您的问题被标记为Liferay 6和Liferay 7。这两个版本截然不同。这个答案假设您使用的是Liferay 6.x,因为您询问的是DDMportlet,而不是OSGI模块 以编程方式将该输入资源设置为默认文件夹需要在文档库显示portlet中为JSP创建JavaServer页面挂钩。在详细介绍之前,我将简要说明如何创建JSP钩子 创建一个钩子

如何通过programmatically.PFA image将其中一个文件夹设置为文档和媒体显示portlet的根文件夹

Liferay主要版本 您的问题被标记为Liferay 6Liferay 7。这两个版本截然不同。这个答案假设您使用的是Liferay 6.x,因为您询问的是DDMportlet,而不是OSGI模块

以编程方式将该输入资源设置为默认文件夹需要在文档库显示portlet中为JSP创建JavaServer页面挂钩。在详细介绍之前,我将简要说明如何创建JSP钩子


创建一个钩子

从命令行终端导航到插件SDK的hooks文件夹。要创建钩子项目,必须执行创建脚本。以下是执行脚本时要遵循的格式:

在Linux和Mac OS X上,您可以输入与本例中类似的命令:

在Windows上,您可以输入与本例类似的命令:

Liferay IDE的新建项目向导和创建脚本在插件SDK的hooks文件夹中生成钩子项目。插件SDK会自动将“-hook”附加到项目名称中

您需要安装ApacheAnt才能使其工作。如果需要安装,请参考以下文档

创建钩子后,在Liferay IDE或Liferay Developers Studio(或Eclipse)中打开它

  • 在IDE中,单击文件右下方的向下箭头(左上角)
  • 从现有源选择Liferay插件项目
  • 双击插件SDK挂钩目录中的doc lib disp hook文件夹打开
  • 您应该会看到与此类似的内容(使用不同的名称)


    重写JSP 现在您已经成功创建了一个钩子插件,我们需要覆盖必要的文件。对于这个钩子,我们特别需要两个文件

    • html/portlet/document\u library\u display/configuration.jsp
    • html/portlet/document_library/init.jsp
    我们需要两个文件在逻辑上遍历这个示例,尽管我们实际上只需要覆盖其中一个文件

    要覆盖JSP的,请执行以下步骤

  • 在META-INF文件夹下创建一个名为“自定义”的新目录
  • 在概览模式下打开liferay hook.xml
  • 单击绿色加号(自定义JSP标签右侧)
  • 搜索上面列出的两个文件(将URL复制并粘贴到窗口中),然后单击“保存”
  • 现在,您将注意到您具有以下目录结构

    让我们首先打开配置.jsp。这是生成您截屏的GUI的代码。查找以下代码块

            <aui:field-wrapper label="root-folder">
                <div class="input-append">
                    <liferay-ui:input-resource id="rootFolderName" url="<%= rootFolderName %>" />
    
                    <aui:button name="openFolderSelectorButton" value="select" />
    
                    <%
                    String taglibRemoveFolder = "Liferay.Util.removeFolderSelection('rootFolderId', 'rootFolderName', '" + renderResponse.getNamespace() + "');";
                    %>
    
                    <aui:button disabled="<%= rootFolderId <= 0 %>" name="removeFolderButton" onClick="<%= taglibRemoveFolder %>" value="remove" />
                </div>
            </aui:field-wrapper>
    
    这段代码基本上是说我们要将rootFolderName初始化为空。但是,如果rootFolderId设置为大于0,则

  • Portlet首选项,或
  • 请求参数
  • 然后我们将相应地设置rootFolderName


    结论 如果您想在默认情况下以编程方式将rootFolderName设置为您选择的文件夹,您可以做一些事情。最简单的方法是获取文件夹的id并像这样修改代码

    long folderIdConstant = 999999L; // place folder id here
    
    long rootFolderId = PrefsParamUtil.getLong(portletPreferences, request, "rootFolderId", folderIdConstant );
    

    这将以编程方式设置默认根文件夹。现在就开始构建和部署。

    我会有一个很好的指针,但会等到你采取行动
    create.bat doc-lib-disp-hook "Document Library Display Hook"
    
            <aui:field-wrapper label="root-folder">
                <div class="input-append">
                    <liferay-ui:input-resource id="rootFolderName" url="<%= rootFolderName %>" />
    
                    <aui:button name="openFolderSelectorButton" value="select" />
    
                    <%
                    String taglibRemoveFolder = "Liferay.Util.removeFolderSelection('rootFolderId', 'rootFolderName', '" + renderResponse.getNamespace() + "');";
                    %>
    
                    <aui:button disabled="<%= rootFolderId <= 0 %>" name="removeFolderButton" onClick="<%= taglibRemoveFolder %>" value="remove" />
                </div>
            </aui:field-wrapper>
    
    <liferay-ui:input-resource id="rootFolderName" url="<%= rootFolderName %>" />
    
    String portletResource = ParamUtil.getString(request, "portletResource");
    
    if (layout.isTypeControlPanel()) {
        portletPreferences = PortletPreferencesLocalServiceUtil.getPreferences(themeDisplay.getCompanyId(), scopeGroupId, PortletKeys.PREFS_OWNER_TYPE_GROUP, 0, PortletKeys.DOCUMENT_LIBRARY, null);
    }
    
    long rootFolderId = PrefsParamUtil.getLong(portletPreferences, request, "rootFolderId", DLFolderConstants.DEFAULT_PARENT_FOLDER_ID);
    String rootFolderName = StringPool.BLANK;
    
    if (rootFolderId != DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
        try {
            Folder rootFolder = DLAppLocalServiceUtil.getFolder(rootFolderId);
    
            rootFolderName = rootFolder.getName();
        }
        catch (NoSuchFolderException nsfe) {
        }
    }
    
    long folderIdConstant = 999999L; // place folder id here
    
    long rootFolderId = PrefsParamUtil.getLong(portletPreferences, request, "rootFolderId", folderIdConstant );