我如何找到-Liferay 6.1中哪些页面上部署了哪些portlet?

dev*_*rog 3 liferay

换句话说,我需要查看哪些数据库表才能将Portlet映射到组织中的页面?如果有这样的事情?我们正在使用Liferay 6.1.20

Pra*_*h K 6

除了市场Portlet

如果您有权访问数据库,则可以在Layout表上触发一个简单查询,以了解在您的portlet的所有页面中添加了什么:

SELECT * FROM Layout WHERE typeSettings LIKE '%my_WAR_myportlet%';
Run Code Online (Sandbox Code Playgroud)

您还可以使用service-builder构建FinderImpl,以通过portlet执行此查询,并将该portlet添加到页面中以所需的任何格式显示。


以下是另一种无需部署任何Portlet且无权访问数据库的解决方案(已在MySQL DB上测试):

  1. 转到服务器管理
  2. 转到脚本选项卡
  3. Beanshell从语言下拉菜单中选择
  4. 将以下脚本代码粘贴到textarea中,然后按执行按钮:

    import com.liferay.portal.kernel.dao.jdbc.DataAccess;
    import com.liferay.portal.kernel.log.Log;
    import com.liferay.portal.kernel.log.LogFactoryUtil;
    import com.liferay.portal.kernel.util.StringBundler;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Iterator;
    import java.util.List;
    
    Connection con = null;
    PreparedStatement ps = null;
    ResultSet rs = null;
    
    try {
        con = DataAccess.getUpgradeOptimizedConnection();
    
        // your custom query here
        String sqlQuery = "SELECT * FROM Layout WHERE typeSettings LIKE '%my_WAR_myportlet%'";
    
        out.println("SQL Query: "+ sqlQuery);
    
        ps = con.prepareStatement(sqlQuery);
    
        rs = ps.executeQuery();
    
        ResultSetMetaData rsmd = rs.getMetaData();
    
        int columnCount = rsmd.getColumnCount();
    
        List rows = new ArrayList();
    
        List columnLabels = new ArrayList();
    
        columnLabels.add("Sr. No.");
    
        for (int c = 1; c <= columnCount; c++) {
            String cl = rsmd.getColumnLabel(c);
            columnLabels.add(cl);
        }
    
        while (rs.next()) {
            List row = new ArrayList(columnCount);
    
            for (int c = 1; c <= columnCount; c++) {
                Object value = rs.getObject(c);
                row.add(value);
            }
    
            rows.add(row);
        }
    
        // --- formatting the results ---
    
        out.append("<div class=\"lfr-search-container \"><div class=\"results-grid\">");
        out.append("<table class=\"taglib-search-iterator\">");
        out.append("<thead>");
        out.append("<tr class=\"portlet-section-header results-header\">");
    
        for (String value : columnLabels) {
            out.append("<th>");
            out.append(value);
            out.append("</th>");
        }
    
        out.append("</tr>");
        out.append("</thead>");
        out.append("<tbody>");
    
        boolean alt = false;
    
        long resultsCount = 1;
    
        for (List line : rows) {
            out.append("<tr class=\"portlet-section-alternate results-row " + (alt ? "alt" : "") + "\">");
    
            // for sr. no.
            out.append("<td>");
            out.append(resultsCount + "");
            out.append("</td>");
    
            resultsCount = resultsCount + 1;
    
            for (Iterator iterator = line.iterator(); iterator.hasNext();) {
                Object value = (Object) iterator.next();
                out.append("<td>");
                if (value != null) {
                    out.append(value.toString());
                } else {
                    out.append("<span style=\"font-style:italic\">null</span>");
                }
                out.append("</td>");
            }
            out.append("</tr>");
            alt = !alt;
        }
    
        out.append("</tbody>");
    
        out.append("</table>");
        out.append("</div></div>");
    
    } catch (Exception exp) {
        out.println("ERROR: " + exp);
        throw exp;
    }
    finally {
        DataAccess.cleanUp(con, ps, rs);
    }
    
    Run Code Online (Sandbox Code Playgroud)
  5. 请记住将字符串更改my_WAR_myportlet为您的portletId

  6. 不用说,您可以修改脚本来更新样式并显示选择性的列。您也可以运行任何SQL查询,只需update即可String sqlQuery

希望这可以帮助。