- Статьи и примеры
- | Разное полезное
- | Три примера постраничного вывода на 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
