- Статьи и примеры
- | Разное полезное
- | Три примера постраничного вывода на java, php и coldfusion script
Три примера постраничного вывода на Java, PHP и ColdFusion Script
Постраничный вывод нужен практически в каждом веб приложении, которое работает с массивами информации.
Постановка задачи
Необходимо получить строчку со ссылками на все страницы. Каждая ссылка должна включать в себя номер страницы плюс некий добавочный запрос. Текущая страница должна быть выделена. Что у нас есть. Запрос к базе данных выдал нам безумное количество наименований товара. Количество их на странице жестко задал начальник. Нетрудно сделать так, чтобы это количество задавал сам пользователь. Выбор пользователя просто хранить в сессии. Не суть. И больше нам ничего не надо. Имеем:
// Количество наименований товара // То количество наименований, которое получили в результате запроса к БД $totalItems; //число записей на страницу $itemsPerPage; // URL адрес, с которого будет начинаться каждая ссылка // на страницу $pageLocation; // добавочный параметр запроса. // Он будет добавлен к каждой ссылке. Формат: &key=value&key1=value1... $addToRequest // номер текущей страницы // на входе функции номер первой страницы = 0 $currentPageNumber;
Результатом работы программы станет строчка вида:
<a href='/my_test/?page=1&f=34&ff=90'>1</a>, <a href='/my_test/?page=2&f=34&ff=90'>2</a>, <a href='/my_test/?page=3&f=34&ff=90'>3</a>, <strong>4</strong>, <a href='/my_test/?page=5&f=34&ff=90'>5</a>, <a href='/my_test/?page=6&f=34&ff=90'>6</a>, <a href='/my_test/?page=7&f=34&ff=90'>7</a>, <a href='/my_test/?page=8&f=34&ff=90'>8</a>,..., <a href='/my_test/?page=500&f=34&ff=90'>500</a>
Вот как будет выглядеть эта же строчка на 60 странице:
<a href='/my_test/?page=1&f=34&ff=90\'>1</a>..., <a href='/my_test/?page=57&f=34&ff=90'>57</a>, <a href='/my_test/?page=58&f=34&ff=90'>58</a>, <a href='/my_test/?page=59&f=34&ff=90'>59</a>, <a href='/my_test/?page=60&f=34&ff=90'>60</a>, <strong>61</strong>, <a href='/my_test/?page=62&f=34&ff=90'>62</a>, <a href='/my_test/?page=63&f=34&ff=90'>63</a>, <a href='/my_test/?page=64&f=34&ff=90'>64</a>, <a href='/my_test/?page=65&f=34&ff=90'>65</a>,..., <a href='/my_test/?page=500&f=34&ff=90'>500</a>
Решение
Одним из вариантов функции для создания такой строчки может быть следующий:
Java
/** * Prepare paging string * * @param currentPageNumber * @param totalItems * @param itemsPerPage * @param pageLocation * @param addToRequest * @return */ public static String preparePagingString(int currentPageNumber, int totalItems, int itemsPerPage, String pageLocation, String addToRequest) { String ret = ""; if (totalItems <= itemsPerPage) return ret; int totalPages = (totalItems / itemsPerPage); if (totalItems % itemsPerPage != 0) totalPages++; if(currentPageNumber >= totalPages) currentPageNumber = totalPages-1; if (totalItems <= currentPageNumber * itemsPerPage) currentPageNumber = 1; int start = currentPageNumber - 4; if (start < 0) start = 0; int end = currentPageNumber + 5; if (end >= totalPages) end = totalPages; if (start > 0){ ret += "<a href='" + pageLocation + "?page=1" + addToRequest + "\'>1</a> "; } if (start > 1) ret += "..., "; for (int i = start; i < end; i++) { if (i == currentPageNumber){ ret += "<strong>" + (i + 1) + "</strong>"; }else{ ret += "<a href='" + pageLocation + "?page=" + (i + 1) + addToRequest + "'>" + (i + 1) + "</a>"; } if (i + 1 < totalPages) ret += ", "; } if (end + 1 < totalPages) ret += "..., "; if (end < totalPages) { if (totalPages == currentPageNumber){ ret += "<strong>" + totalPages + "</strong>"; }else{ ret += "<a href='" + pageLocation + "?page=" + totalPages + addToRequest + "'>" + totalPages + "</a>"; } } ret += " "; return ret; }
Вызов функции производится следующим образом:
preparePagingString(0,20,4,"/my_test/","&f=34&ff=90");
Страница:
-
1