#0001
#0002
#0003
#0004
#0005
#0006
#0007
#0008
#0009
#0010
#0011
#0012
#0013
#0014
#0015
#0016
#0017
#0018
#0019
#0020
#0021
#0022
#0023
#0024
#0025
#0026
#0027
#0028
#0029
#0030
#0031
#0032
#0033
#0034
#0035
#0036
#0037
#0038
#0039
#0040
#0041
#0042
#0043
#0044
#0045
#0046
#0047
#0048
#0049
#0050
#0051
#0052
#0053
#0054
#0055
#0056
#0057
#0058
#0059
#0060
#0061
#0062
#0063
#0064
#0065
#0066
#0067
#0068
#0069
#0070
#0071
#0072
#0073
#0074
#0075
#0076
#0077
#0078
#0079
#0080
#0081
#0082
#0083
#0084
#0085
#0086
#0087
#0088
#0089
#0090
#0091
#0092
#0093
#0094
#0095
#0096
#0097
#0098
#0099
#0100
#0101
#0102
#0103
#0104
#0105
#0106
#0107
#0108
#0109
#0110
#0111
#0112
#0113
#0114
#0115
#0116
#0117
#0118
#0119
#0120
#0121
#0122
#0123
#0124
#0125
#0126
#0127
#0128
#0129
#0130
#0131
#0132
#0133
#0134
#0135
#0136
#0137
#0138
#0139
#0140
#0141
#0142
#0143
#0144
#0145
#0146
#0147
#0148
#0149
#0150
#0151
#0152
#0153
#0154
#0155
#0156
#0157
#0158
#0159
#0160
#0161
#0162
#0163
#0164
#0165
#0166
#0167
#0168
#0169
#0170
#0171
#0172
#0173
#0174
#0175
#0176
#0177
#0178
#0179
#0180
#0181
#0182
#0183
#0184
#0185
#0186
#0187
#0188
#0189
#0190
#0191
#0192
#0193
#0194
#0195
#0196
#0197
#0198
#0199
#0200
#0201
#0202
#0203
#0204
#0205
#0206
#0207
#0208
#0209
#0210
#0211
#0212
#0213
#0214
#0215
#0216
#0217
#0218
#0219
#0220
#0221
#0222
#0223
#0224
#0225
#0226
#0227
#0228
#0229
#0230
#0231
#0232
#0233
#0234
#0235
#0236
#0237
#0238
#0239
#0240
#0241
#0242
#0243
#0244
#0245
#0246
#0247
#0248
#0249
#0250
#0251
#0252
#0253
#0254
#0255
#0256
#0257
#0258
#0259
#0260
#0261
#0262
#0263
#0264
#0265
#0266
#0267
#0268
#0269
#0270
#0271
#0272
#0273
#0274
#0275
#0276
#0277
#0278
#0279
#0280
#0281
#0282
#0283
#0284
#0285
#0286
#0287
#0288
#0289
#0290
#0291
#0292
#0293
#0294
#0295
#0296
#0297
#0298
#0299
#0300
#0301
#0302
#0303
#0304
#0305
#0306
#0307
#0308
#0309
#0310
#0311
#0312
|
<?php /* * Paging class. Can be used to page a model or an array * * @author Nesbert Hidalgo */ class pager {
public $total_records; // total number of records to page public $total_pages; // total number of pages public $current; // current page number public $next; // next page number public $prev; // previous page number public $first; // first page number public $last; // last page number
public $offset; // pointer offest public $limit; // limit of records per page public $url; // host url public function __construct($data = null) { $this->set_properties($data); } /** * Set class properties * * @author Nesbert Hidalgo * @access public * @param array $data required * @param int $page optional * @param int $limit optional */ public function set_properties($data, $page = null, $limit = null) {
// set vars by type $page = ( $page ? $page : ( $_GET['page'] ? $_GET['page'] : 1 ) ); $limit = ( $limit ? $limit : ( $_GET['limit'] ? $_GET['limit'] : 10 ) );
switch ( true ) { case ( is_object($data) ): $total_records = $data->total_records; $page = ( isset($data->page) ? $data->page : $page ); $limit = ( isset($data->limit) ? $data->limit : $limit ); break; case ( is_array($data) ): $total_records = count($data); break; case ( is_numeric($data) ): $total_records = $data; break; } // set total_records, limit, total_pages $this->total_records = (int) $total_records; $this->limit = max((int) $limit, 1); $this->total_pages = ceil($this->total_records / $this->limit); // set current page $this->current = (int) $page; $this->current = max($this->current, 1); $this->current = min($this->current, $this->total_pages); // set offest $this->offset = max(($this->current - 1) * $this->limit, 0); // set next & previous pages $this->next = min($this->current + 1, $this->total_pages); $this->prev = max($this->current - 1, 1); $this->first = 1; $this->last = $this->total_pages; // set url path $url = @explode('?', $_SERVER['REQUEST_URI']); $this->url = $url[0];
} /** * Page an array * * @author Nesbert Hidalgo * @access public * @param array $data required * @param bool $preserve_keys optional * @param bool $limit optional * @return mixed */ public function page_array($data, $preserve_keys = true, $limit = false) { if ( !$this->total_records ) $this->set_properties($data, null, $limit); return array_slice($data, $this->offset, $this->limit, $preserve_keys); } /** * Clean/create extra params links * * @author Nesbert Hidalgo * @access public * @param mixed $data required * @return mixed */ public function params_to_str($data) { $data = is_array($data) ? array_merge($_GET, $data) : $_GET; $str = ''; foreach ( $data as $key => $val ) { if ( $key == 'page' || $key == 'limit') continue; $str .="&".$key."=".urlencode($val); } return $str; } /** * Create link to page * * @author Nesbert Hidalgo * @access private * @param string $label required * @param int $page required * @param array $extra_params optional * @param array $html_options optional * @return string */ private function link_to($label, $page, $extra_params = null, $html_options = null) { $extra_params = ( isset($_GET['limit']) ? "&limit={$this->limit}" : '' ).$this->params_to_str($extra_params); $html_options = ( is_array($html_options) ? array_merge(array('href' => $this->url.'?page='.$page.$extra_params), $html_options) : array('href' => $this->url.'?page='.$page.$extra_params) ); return link_to($label, null, null, null, $html_options); } /** * Create link to the mext page * * @author Nesbert Hidalgo * @access public * @param string $label optional * @param array $extra_params optional * @param array $html_options optional * @return string */ public function link_to_next($label = 'Next', $extra_params = null, $html_options = null) { return ( $this->current < $this->last ? $this->link_to($label, $this->next, $extra_params, $html_options) : '' ); }
/** * Create link to the previous page * * @author Nesbert Hidalgo * @access public * @param string $label optional * @param array $extra_params optional * @param array $html_options optional * @return string */ public function link_to_prev($label = 'Prev', $extra_params = null, $html_options = null) { return ( $this->current > $this->first ? $this->link_to($label, $this->prev, $extra_params, $html_options) : '' ); }
/** * Create link to the first page * * @author Nesbert Hidalgo * @access public * @param string $label optional * @param array $extra_params optional * @param array $html_options optional * @return string */ public function link_to_first($label = 'First', $extra_params = null, $html_options = null) { return ( $this->current > $this->first ? $this->link_to($label, $this->first, $extra_params, $html_options) : '' ); } /** * Create link to the last page * * @author Nesbert Hidalgo * @access public * @param string $label optional * @param array $extra_params optional * @param array $html_options optional * @return string */ public function link_to_last($label = 'Last', $extra_params = null, $html_options = null) { return ( $this->current < $this->last ? $this->link_to($label, $this->last, $extra_params, $html_options) : '' ); }
/** * Create paging links eg. << Prev 1 ... 13 14 15 16 17 ... 25 Next >> * * @author Nesbert Hidalgo * @access public * @param array $extra_params optional * @return string */ public function paging_links($extra_params = null, $show_label = false) { $extra_params = ( isset($_GET['limit']) ? "&limit={$this->limit}" : '' ).$this->params_to_str($extra_params); $start_page = max($this->current - 2, 1); if ( $this->total_pages > 1 ) { $str = '<div class="page-links">'; if ( $show_label ) $str .= $this->paging_label(); if ( $this->current > 1 ) { $str .= '<a class="prev" href="'.$this->url.'?page='.$this->prev.$extra_params.'">« Prev</a>'; } if ( ($this->current - 3) >= 1 ) { $str .= '<a class="page-1" href="'.$this->url.'?page=1'.$extra_params.'">1</a>'; if ( ($this->current - 3) > 1 ) $str .= '<span="dots">...</span>'; } for ( $i = $start_page; $i <= $this->current + 2; $i++ ) { if ( $i > $this->total_pages ) break; if ( $this->current <> $i ) { $str .= '<a class="page-'.$i.'" href="'.$this->url.'?page='.$i.$extra_params.'">'.$i.'</a>'; } else { $str .= '<a class="page-'.$i.' current">'.$i.'</a>'; } } if ( ($this->current + 3) <= $this->total_pages ) { if ( ($this->current + 3) < $this->total_pages ) $str .= '<span="dots">...</span>'; $str .= '<a class="page-'.$this->total_pages.'" href="'.$this->url.'?page='.$this->total_pages.$extra_params.'">'.$this->total_pages.'</a>'; } if ( $this->current < $this->total_pages ) { $str .= '<a class="next" href="'.$this->url.'?page='.$this->next.$extra_params.'">Next »</a>'; } $str .= '</div>'; } else { $str = ''; } return $str; } /** * Create page limiting selectbox * * @author Nesbert Hidalgo * @access public * @param array $extra_params optional * @param array $default_limit optional * @return string */ public function paging_limit($extra_params = null, $default_limit = 10) { $extra_params = $this->params_to_str($extra_params); $default_limit = (int) ( $default_limit ? $default_limit : $this->limit ); $str = '<select OnChange="location.href=this.options[this.selectedIndex].value">'."\n"; // if default_limit not a default value(20,50,100) create option for limit switch ( $default_limit ) { case 20: case 50: case 100: break; default: $str .= '<option value="'.$this->url.'?page='.$this->current.'&limit='.$default_limit.$extra_params.'"'.( $this->limit == $default_limit ? " selected" : "" ).'>'.$default_limit.'</option>'."\n"; break; } $str .= '<option value="'.$this->url.'?page='.$this->current.'&limit=20'.$extra_params.'"'.( $this->limit == 20 ? ' selected="selected"' : '' ).'>20</option>'."\n"; $str .= '<option value="'.$this->url.'?page='.$this->current.'&limit=50'.$extra_params.'"'.( $this->limit == 50 ? ' selected="selected"' : '' ).'>50</option>'."\n"; $str .= '<option value="'.$this->url.'?page='.$this->current.'&limit=100'.$extra_params.'"'.( $this->limit == 100 ? ' selected="selected"' : '' ).'>100</option>'."\n"; $str .= "</select>\n"; return $str; } /** * Create paging label: Page 1 of 10 * * @author Nesbert Hidalgo * @access public * @return string */ public function paging_label() { return '<span class="page-label">Page '.$this->current.' of '.$this->total_pages.'</span>'; }
} ?>
|