Forums

Home » Liferay Portal » English » 3. Development

Combination View Flat View Tree View
Threads [ Previous | Next ]
toggle
Jack Bakker
way to discover pages a portlet is on
August 14, 2012 5:50 PM
Answer

Jack Bakker

Rank: Liferay Master

Posts: 643

Join Date: January 3, 2010

Recent Posts

looking for a way to list pages a custom portlet might be on
Jelmer Kuperus
RE: way to discover pages a portlet is on
August 14, 2012 10:45 PM
Answer

Jelmer Kuperus

Rank: Liferay Legend

Posts: 1192

Join Date: March 10, 2010

Recent Posts

Maybe this post is of use to you
Victor Zorin
RE: way to discover pages a portlet is on
August 14, 2012 11:22 PM
Answer

Victor Zorin

Rank: Liferay Legend

Posts: 1176

Join Date: April 14, 2008

Recent Posts

This is how we count instances of a specific portlet . You should be able to use similar approach to find out urls from layouts. I suppose you should not be really making such calls every time. Only when you would like to know.

 1    public int countInstances(PortletConfig config, java.util.ArrayList<Long> links) throws NoLicenseInfoException {
 2        try {
 3            int totalCount = PortletPreferencesLocalServiceUtil
 4                    .getPortletPreferencesesCount();
 5            int currentIndex = 0;
 6            int instanceCount = 0;
 7            while (currentIndex <= totalCount) {
 8                int toIndex = currentIndex + 10;
 9                if (toIndex > totalCount) {
10                    toIndex = totalCount;
11                }
12                if (toIndex <= currentIndex) {
13                    break;
14                }
15                java.util.List<com.liferay.portal.model.PortletPreferences> list = PortletPreferencesLocalServiceUtil
16                        .getPortletPreferenceses(currentIndex, toIndex);
17               
18                java.util.Iterator<com.liferay.portal.model.PortletPreferences> it = list
19                        .iterator();
20                while (it.hasNext()) {
21                    com.liferay.portal.model.PortletPreferences pref = it
22                            .next();
23                    if (pref.getPortletId().startsWith(config.getPortletName())) {
24                        String settings = LayoutLocalServiceUtil.getLayout(pref.getPlid()).getTypeSettings();
25                        // max contain portlet Id to be counted
26                        if(settings.contains(config.getPortletName()))
27                        {
28                            if(links != null)
29                            {
30                                links.add(pref.getPlid());
31                            }
32                            instanceCount++;
33                        }
34                    }
35                    currentIndex++;
36                }
37            }
38            return instanceCount;
39        } catch (Exception e) {
40            throw new NoLicenseInfoException();
41        }
42    }
Vitaliy Koshelenko
RE: way to discover pages a portlet is on
August 15, 2012 10:11 AM
Answer

Vitaliy Koshelenko

Rank: Regular Member

Posts: 222

Join Date: March 25, 2011

Recent Posts

Hi, Jack.
I have done it in a way like this:

 1        String PORTLET_ID = "customPortlet";
 2
 3            //Iterate over layouts
 4            List<Layout> layouts = LayoutLocalServiceUtil.getLayouts(groupId, false);
 5            for (Layout layout : layouts) {
 6
 7                if (layout.getLayoutType() != null) {
 8
 9                    //Iterate over all Slider portlets
10                    DynamicQuery portletDynamicQuery = DynamicQueryFactoryUtil.forClass(Portlet.class, classLoader).add(PropertyFactoryUtil.forName("portletId").like(PORTLET_ID + "%"));
11                    List<Portlet> portlets = PortletLocalServiceUtil.dynamicQuery(portletDynamicQuery);
12                    for (Portlet portlet : portlets) {
13
14                        //Get layout properties - in order to obtain full portletId
15                        HashMap<String, String> layoutPropertiesMap = layout.getTypeSettingsProperties();
16
17                        for (String layoutValue : layoutPropertiesMap.values()) {
18
19                            if (layoutValue.startsWith(PORTLET_ID)) {
20
21                                // the portletId is the initial part before first "," if extra info is present
22                                String portletId = layoutValue.contains(StringPool.COMMA) ?
23                                        layoutValue.substring(0, layoutValue.indexOf(StringPool.COMMA)) :
24                                        layoutValue;
25
26                //your porlet with this portletId is on this layout in this case
27                //...
28            
29                }
30            }
31             }
32               }
33        }
Jack Bakker
RE: way to discover pages a portlet is on
August 15, 2012 7:53 PM
Answer

Jack Bakker

Rank: Liferay Master

Posts: 643

Join Date: January 3, 2010

Recent Posts

thanks guys