вторник, 19 ноября 2013 г.

Постраничная навигация AssetPublisher

В Liferay Portal 6.1.1 GA2 недокументированная особенность метода AssetEntryServiceUtil.getEntriesCount

Если настроить Публикатор по одному типу ресурса (например, "Сетевой контент" подтип "Новость"), без фильтрации и группировки по категориям и тегам, включить постраничную навигацию и отметить галочку "Включить права", то подсчет найденных ассетов никогда не превысит 200! В результате если у вас наберется новостей скажем 398, то при количестве элементов на страницу 20 выдасться всего 10 страниц. Игра с настройками не помогает - похоже какое-то внутрисистемное ограничение на максимальное количество ассетов выбираемых для проверки разрешений, типа asset.filter.search.limit

Быстрым решением было получение общего количества ассетов удовлетворяющих условию через AssetEntryLocalServiceUtil и а-ля аппроксимация в сторону убывания к правильному значению. Пример модификации /jsp/html/portlet/asset_publisher/view_dynamic_list.jspf (начиная со строки 93):
 else if (!groupByClass) {
  assetEntryQuery.setClassNameIds(classNameIds);

  /* total = AssetEntryServiceUtil.getEntriesCount(assetEntryQuery); */
  total = AssetEntryLocalServiceUtil.getEntriesCount(assetEntryQuery);
  if(total > delta){
   do{
    assetEntryQuery.setEnd(total);
    assetEntryQuery.setStart(total - delta);
    results = AssetEntryServiceUtil.getEntries(assetEntryQuery);
    if(results.size() < delta){
     total = total - delta + results.size();
    }
   } while (results.size() == 0);  
  }else{
   total = AssetEntryServiceUtil.getEntriesCount(assetEntryQuery);
  }

  searchContainer.setTotal(total);

Комментариев нет:

Отправить комментарий