Три примера постраничного вывода на Java, PHP и ColdFusion Script Страница 2

PHP

 function preparePagingString($currentPageNumber, $totalItems, $itemsPerPage, $pageLocation, $addToRequest){
  $ret = "";
  if ($totalItems <= $itemsPerPage) return $ret;
 
  $totalPages = intval ($totalItems / $itemsPerPage);
  if ($totalItems % $itemsPerPage) $totalPages++;
  if($currentPageNumber >= $totalPages)
   $currentPageNumber = $totalPages-1;
  if ($totalItems <= $currentPageNumber * $itemsPerPage)
   $currentPageNumber = 1;      

  $start = $currentPageNumber - 4;
  $end = $currentPageNumber + 5;
  if ($start < 0) $start = 0;
  if ($end >= $totalPages) $end = $totalPages;

  if ($start > 0){
   $ret .= "<a href='".$pageLocation."?page=1".$addToRequest."\'>1</a> ";
  }
  if ($start > 1)
   $ret .= "..., ";
  for ($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>";
    }
   }
   return $ret;        
 }

Вызов функции производится следующим образом:

 <?
 $paging_string = preparePagingString(0,20,4,"/my_test/","&f=34&ff=90");
 echo $paging_string;
 ?>

ColdFusion

Формирование строки происходит в cf скрипте.

 <cfscript>
  ret = "";
  pageLocation = "/my_site/my_page/";
  addToRequest = "&key1=val1&key2=val2";

  if(totalPages gt itemsPerPage){

   totalPages = totalPages \ itemsPerPage;
   if (totalPages MOD itemsPerPage neq 0){
    totalPages = totalPages+1;
   }
   if (currentPageNumber gte totalPages){
    currentPageNumber = totalPages-1;
   }
 
   if (totalPages lte (currentPageNumber-1) * itemsPerPage){
    currentPageNumber = 1;
   }
   if (totalPages gt itemsPerPage) {
    start = currentPageNumber - 4;
    if (start lt 0){
     start = 0;
    }
    end = currentPageNumber + 5;
    if (end gte totalPages){
     end = totalPages;  
    }  
    if (start gt 0){
     ret = ret & "<a href='" & pageLocation & "?currentPageNumber=1" & addToRequest & "'>1</a> ";
    }
    if (start gt 1){
     ret = ret & "..., ";
    }
    for (i = start; i lt end; i=i+1) {

    if (i+1 eq currentPageNumber){
     ret = ret & "<strong>" & (i + 1) & "</strong>";
    }else{
     ret = ret & "<a href='" & pageLocation & "?currentPageNumber=" & (i + 1) & addToRequest & "'>" & (i + 1) & "</a>";
    }
    if (i + 1 lt totalPages){
     ret = ret & ", ";
    }
   }
   if (end + 1 lt totalPages){
    ret = ret & "..., ";
   }
   if (end lt totalPages) {
    if (totalPages eq currentPageNumber){
     ret = ret & "<strong>" & totalPages & "</strong>";
    }else{
     ret = ret & "<a href='" & pageLocation & "?currentPageNumber=" & totalPages & addToRequest & "'>" & totalPages & "</a>";
    }
   }
   ret = "Page: " & ret;
   }
  }
 </cfscript>

Теперь пару слов о том как получить нужную страницу при помощи SQL запроса из базы данных. Про MySQL здесь речь не пойдет — смотрите документацию. Покажем только запрос к Oracle.

 PreparedStatement ps = null;
 ps = connection.prepareStatement("SELECT b.*,rownum, " +
 "FROM( SELECT a.*, rownum as rnum FROM ( " +
 "SELECT * FROM table WHERE " +
 "MyDATE > TO_DATE(?, 'YYYY/MM/DD') " +
 "AND MyDATE < TO_DATE(?, 'YYYY/MM/DD')+1) a where rownum <= ? )" + 
 "b where b.rnum >= ?");
 ps.setString(1,fromDateString);
 ps.setString(2,toDateString);
 ps.setInt(3,startPaging);
 ps.setInt(4,endPaging);	

В этом запросе мы получаем записи из таблицы table начиная со startPaging и заканчивая endPaging. По условию выбираются записи с датой MyDATE в промежуток времени от fromDateString до toDateString включая эти даты.

Файлы, используемые в статье

Страница:

  • 1

  • 2

Александр Смелков
Санкт-Петербург Зима 2009