Класс обработки постраничного вывода запроса к БД

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
<?php
/**
* Класс обработки постраничного вывода запроса к БД
* @author Kostya Pereverzev
* @version 2.0
*/
class RecordSet {
/**
* Длина результата
*
* @var int
*/
var $records_count;
/**
* Количество страниц
*
* @var int
*/
var $pages_count;
/**
* Текущая страница
*
* @var int
*/
var $current_page;
/**
* Границы страницы
*
* @var array
*/
var $page_scope = array('start' => 0, 'end' => 0);
/**
* Массив результатов
*
* @var array
*/
var $result = array();
/**
* Массив с номерами страниц
*
* @var array
*/
var $pages;
/**
* Расчет количества страниц вывода
*
* @param string $count_query запрос общего количества результатов
* @param int $page_limit количество результатов на страницу
* @return int
*/
function __count_pages ($page_limit) {
$result = mysql_query("SELECT FOUND_ROWS()");
$this->records_count = intval(mysql_result($result, 0, 0));
return ceil($this->records_count/$page_limit);
}
/**
* Расчет начальной записи
*
* @param текущая страница $page_start
* @param количество записей на страницу $page_limit
* @return int
*/
function __get_start_record ($page_start, $page_limit) {
return ($page_start - 1) * $page_limit;
}
/**
* Вывод списка страниц
*
* @return array
*/
function __list_page_numbers () {
$pages = array();
for ($i=1; $i<=$this->pages_count; $i++) {
$pages[] = $i;
}
return $pages;
}
/**
* Конструктор обекта RecordSet
*
* @param string $result_query запрос результатов
* @param int $page_limit количество результатов на страницу
* @param int $page_start номер страницы для вывода результатов
* @return RecordSet
*/
function RecordSet($result_query, $page_limit = 20, $page_start = 1, $print_query = false ) {
$page_start = intval($page_start);
$this->current_page = $page_start;
$result_query = $result_query . " LIMIT " . $this->__get_start_record($page_start, $page_limit) . ", $page_limit";
//
if($print_query == true)
{
print "<br/><xmp>\n".$result_query."\n</xmp>\n<br/>\n";
}
$result = mysql_query($result_query) or die(mysql_error());
$this->pages_count = $this->__count_pages($page_limit);
$i = $this->__get_start_record($page_start, $page_limit) + 1;
$this->page_scope['start'] = $i;
while ($line = mysql_fetch_assoc($result))
{
$this->result[$i] = $line;
$this->page_scope['end'] = $i;
$i++;
}
$this->pages = $this->__list_page_numbers();
}
}
/*
пример
$sql = 'SELECT SQL_CALC_FOUND_ROWS * FROM asda';
$aha = new RecordSet($sql, 20, 1);
print_r($aha);
*/
?>