2014-10-03 56 views
2

換句話說,我需要查看哪些數據庫表用於將Portlet映射到組織中的頁面?如果有這樣的事情?!我們正在使用Liferay 6.1.20我如何找到 - 在Liferay 6.1的哪些頁面上部署哪些Portlet?

+1

layoutset是你正在尋找的表的表。此外,liferay市場還有一個應用程序可用(portlet位置跟蹤器) – 2014-10-03 20:39:04

+0

以及佈局表。 – 2014-10-07 07:34:35

回答

3

除了marketplace portlet小門戶。

如果你有對數據庫的訪問,你可以觸發一個簡單的查詢就Layout表要知道所有的網頁您的portlet添加什麼:

SELECT * FROM Layout WHERE typeSettings LIKE '%my_WAR_myportlet%'; 

您也可以建立一個FinderImpl與服務構建器通過portlet執行此查詢並將該portlet添加到頁面以顯示您想要的任何格式。


下面是無需部署任何portlet並無需訪問數據庫,在MySQL數據庫測試的另一種解決方案:

  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 sql = "SELECT * FROM Layout WHERE typeSettings LIKE '%my_WAR_myportlet%'"; 
    
        String limitQuery = " LIMIT 0, 1000"; 
    
        String sqlQuery = sql + limitQuery; 
    
        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); 
    } 
    
  5. 請記住字符串my_WAR_myportlet更改爲portletId

  6. 不用說,你可以修改腳本來更新的款式和可顯示選擇列。你也可以運行任何MySQL查詢,只需更新String sql

希望這有助於。

+0

就像一個魅力一樣工作,這真的很酷!從來沒有在控制面板的腳本選項卡中。現在我已經使用了它。靜止學習Liferay。謝謝你的幫助! – 2014-10-09 13:44:53

+0

:-)我的榮幸。但在stackoverflow有一種不同的方式來說謝謝你...希望你知道我的意思;-) ...嘿 – 2014-10-09 17:38:58

+0

我意識到,但我沒有'資源',謝謝你呢:( – 2014-10-29 14:58:55

2

下面是一個代碼來獲取所有從第一列

ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY); 
Layout layout = themeDisplay.getLayout(); 
LayoutTypePortlet layoutTypePortlet = (LayoutTypePortlet) layout.getLayoutType(); 
List<Portlet> portlets = layoutTypePortlet.getAllPortlets("column-1"); 
for (Portlet portlet : portlets) { 
    // print your portlet.getPortletId() or do whatever you need 
} 
+0

或者只是調用layoutTypePortlet.getAllPortlets()來獲取頁面上的所有portlet – 2017-01-18 13:03:15

0

[版面]中,你可以找出哪些portlet(typeSettings)部署在哪個頁面

相關問題