Foren
way to discover pages a portlet is on
Jack Bakker, geändert vor 11 Jahren.
way to discover pages a portlet is on
Liferay Master Beiträge: 978 Beitrittsdatum: 03.01.10 Neueste Beiträge
looking for a way to list pages a custom portlet might be on
jelmer kuperus, geändert vor 11 Jahren.
RE: way to discover pages a portlet is on
Liferay Legend Beiträge: 1191 Beitrittsdatum: 10.03.10 Neueste Beiträge
Victor Zorin, geändert vor 11 Jahren.
RE: way to discover pages a portlet is on
Liferay Legend Beiträge: 1228 Beitrittsdatum: 14.04.08 Neueste Beiträge
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.
public int countInstances(PortletConfig config, java.util.ArrayList<long> links) throws NoLicenseInfoException {
try {
int totalCount = PortletPreferencesLocalServiceUtil
.getPortletPreferencesesCount();
int currentIndex = 0;
int instanceCount = 0;
while (currentIndex <= totalCount) {
int toIndex = currentIndex + 10;
if (toIndex > totalCount) {
toIndex = totalCount;
}
if (toIndex <= currentIndex) {
break;
}
java.util.List<com.liferay.portal.model.portletpreferences> list = PortletPreferencesLocalServiceUtil
.getPortletPreferenceses(currentIndex, toIndex);
java.util.Iterator<com.liferay.portal.model.portletpreferences> it = list
.iterator();
while (it.hasNext()) {
com.liferay.portal.model.PortletPreferences pref = it
.next();
if (pref.getPortletId().startsWith(config.getPortletName())) {
String settings = LayoutLocalServiceUtil.getLayout(pref.getPlid()).getTypeSettings();
// max contain portlet Id to be counted
if(settings.contains(config.getPortletName()))
{
if(links != null)
{
links.add(pref.getPlid());
}
instanceCount++;
}
}
currentIndex++;
}
}
return instanceCount;
} catch (Exception e) {
throw new NoLicenseInfoException();
}
}
</com.liferay.portal.model.portletpreferences></com.liferay.portal.model.portletpreferences></long>
Vitaliy Koshelenko, geändert vor 11 Jahren.
RE: way to discover pages a portlet is on
Expert Beiträge: 319 Beitrittsdatum: 25.03.11 Neueste Beiträge
Hi, Jack.
I have done it in a way like this:
I have done it in a way like this:
String PORTLET_ID = "customPortlet";
//Iterate over layouts
List<layout> layouts = LayoutLocalServiceUtil.getLayouts(groupId, false);
for (Layout layout : layouts) {
if (layout.getLayoutType() != null) {
//Iterate over all Slider portlets
DynamicQuery portletDynamicQuery = DynamicQueryFactoryUtil.forClass(Portlet.class, classLoader).add(PropertyFactoryUtil.forName("portletId").like(PORTLET_ID + "%"));
List<portlet> portlets = PortletLocalServiceUtil.dynamicQuery(portletDynamicQuery);
for (Portlet portlet : portlets) {
//Get layout properties - in order to obtain full portletId
HashMap<string, string> layoutPropertiesMap = layout.getTypeSettingsProperties();
for (String layoutValue : layoutPropertiesMap.values()) {
if (layoutValue.startsWith(PORTLET_ID)) {
// the portletId is the initial part before first "," if extra info is present
String portletId = layoutValue.contains(StringPool.COMMA) ?
layoutValue.substring(0, layoutValue.indexOf(StringPool.COMMA)) :
layoutValue;
//your porlet with this portletId is on this layout in this case
//...
}
}
}
}
}</string,></portlet></layout>
Jack Bakker, geändert vor 11 Jahren.
RE: way to discover pages a portlet is on
Liferay Master Beiträge: 978 Beitrittsdatum: 03.01.10 Neueste Beiträge
thanks guys