ارسالها: 44
موضوعها: 18
تاریخ عضویت: خرداد 1394
اعتبار:
1
تشکرها: 11
24 بار تشکر شده در 19 پست
با سلام
کسی از دوستان امکانش هست که کد صفحه بندی رو اماده داشته باشه و در اختیار بقیه هم بذاره.
صفحه قبلی تعداد صفحات صفحه بعدی و اینکه نشون بده که کاربر الان صفحه چندم از چند صفحه هست.
با تشکر
ارسالها: 3,701
موضوعها: 140
تاریخ عضویت: اردیبهشت 1394
اعتبار:
134
تشکرها: 195
3447 بار تشکر شده در 2120 پست
خوب کد آماده ای قاعدتاً نیست و اگه باشه هم خیلی کلیه. کلاسهای Pagination زیاد هستن ولی اگه بگین با چه قالبی میخواین و به چه صورت میخواین صفحه بندی انجام بشه، بهتر میشه راهنمایی کرد. بد نیست توی PHPClasses.org یه جستجو درمورد Pagination Class داشته باشین.
11-03-1394، 08:04 ب.ظ
(آخرین تغییر در ارسال: 11-03-1394، 08:06 ب.ظ توسط Bidak.)
ارسالها: 2
موضوعها: 1
تاریخ عضویت: خرداد 1394
اعتبار:
0
تشکرها: 2
5 بار تشکر شده در 2 پست
کلاس paging:
<?php
/**
* @author Mohsen Movahed <l3iidak@yahoo.com>
* @copyright 2014 Mohsen Movahed
* @date 19 May 2014 - 1393/2/28
* @version 1.0
* @license GPL
* @link http://www.bidakplus.ir
*/
class Pagination
{
private $items;
private $output;
/**
* construct method
*/
public function __construct($params = null)
{
$this->items = array(
'items_per_page' => 5, // Records per page to display
'total_records' => 0, // Total records in database
'total_pages' => 0, // Total number of pages
'url_address' => '', // For example: http://www.mysite.com/?page=
'concat_to_url' => '', // This comes after page value - [optional]
'current_page' => 1, // Number of current page
'page_num_per_section' => 5, // Total number of pages to display - for example CurrentPage=16 :=> [first][next]...,14,15,[16],17,18,...[prev][last]
'mode' => false, // Mode = true or anything => Display:: 1,...,14,15,[16],17,18,...,20
);
// set values
if (isset($params) && count($params) > 0)
{
if (is_array($params))
{
foreach ($params as $key => $value)
{
if (!empty($value))
{
$this->$key = $value;
}
}
}
}
// run paginate method
$this->paginate();
}
/**
* get values
* @param string $key Must be index of items array
* @return mixed|boolean if there is $key, returns array value otherwise returns false.
*/
public function __get($key)
{
if (isset($this->items[$key]))
{
return $this->items[$key];
}
return false;
}
/**
* set values
* @param string $key Index of items array
* @param mixed $value a value for set
*/
public function __set($key, $value)
{
if (isset($this->items[$key]))
{
$this->items[$key] = $value;
}
}
/**
* get total pages
* @return integer Return the total pages
*/
private function getTotalPages()
{
$this->items_per_page = ($this->items_per_page <= 0 ? 1 : $this->items_per_page);
$total = ceil($this->total_records / $this->items_per_page);
if ($total <= 0)
{
$total = abs($total) + 1;
}
return $total;
}
/**
* this manages to display pagination
*/
private function paginate()
{
$this->total_pages = $this->getTotalPages(); // set total pages
$check = $this->checkItems(); // check item values and page number
if ($check)
{
// start of section
$start = $this->current_page - floor($this->page_num_per_section / 2);
// maximum start
$max = $this->total_pages - floor($this->page_num_per_section / 2);
if($start <= 0 || $start > $max)
{
if ($start > $max)
$this->current_page = 1;
$start = 1;
}
// end of section
$end = $start + $this->page_num_per_section - 1;
if($end > $this->total_pages)
{
$end = $this->total_pages;
}
$this->output .= '<ul class="paging">' . PHP_EOL;
// print first page button
if ($this->mode == false && $this->current_page != 1)
{
$this->output .= '<li><a href="'. $this->url_address . 1 . $this->concat_to_url .'">First</a></li>' . PHP_EOL;
}
// print next page button
if ($this->current_page < $this->total_pages && $this->mode == false)
{
$this->output .= '<li><a href="'. $this->url_address . $this->nextPage() . $this->concat_to_url .'">Next</a></li>' . PHP_EOL;
}
// print page number
for ($i = $start; $i <= $end ; $i++)
{
// print dots in right
if ($i == $start && $start > 1 && $i != 1)
{
// print page one
if ($this->mode)
{
$this->output .= '<li><a href="'. $this->url_address . 1 . $this->concat_to_url .'">1</a></li>' . PHP_EOL;
}
$this->output .= '<li class="dot-paginator">...</li>' . PHP_EOL;
}
// print pages number
$this->output .= '<li><a class="'. ($i == $this->current_page ? 'current-page' : '') .'" href="'. $this->url_address . $i .'">'. $i .'</a></li>' . PHP_EOL;
// print dots in left
if ($i <= $this->total_pages && $i == $end && $i != $this->total_pages)
{
$this->output .= '<li class="dot-paginator">...</li>' . PHP_EOL;
}
}
// print prev page button
if ($this->current_page > 1 && $this->mode == false)
{
$this->output .= '<li><a href="'. $this->url_address . $this->prevPage() . $this->concat_to_url .'">Previous</a></li>' . PHP_EOL;
}
// print last page number
if ($this->mode && $this->total_pages != $this->current_page && $this->total_pages != $end)
{
$this->output .= '<li><a href="'. $this->url_address . $this->total_pages . $this->concat_to_url .'">'. $this->total_pages .'</a></li>' . PHP_EOL;
}
// print last page button
if ($this->mode == false && $this->current_page != $this->total_pages)
{
$this->output .= '<li><a href="'. $this->url_address . $this->total_pages . $this->concat_to_url .'">Last</a></li>' . PHP_EOL;
}
$this->output .= '</ul><br>' . PHP_EOL;
}
}
/**
* check item values
* @return boolean The result true if item values is not empty, false otherwise
*/
private function checkItems()
{
foreach ($this->items as $key => $value)
{
if (empty($value))
{
settype($key, 'string');
switch ($key)
{
case 'current_page':
$this->$key = 1; // not required beacause by default equal to 1
break;
case 'concat_to_url':
break;
case 'mode':
break;
default:
return false;
break;
}
}
}
if ($this->total_pages == 1)
{
return false;
}
$this->checkPageNumber();
return true;
}
/**
* check page number
*/
private function checkPageNumber()
{
$this->current_page = intval($this->current_page);
if ($this->current_page > $this->total_pages)
{
$this->current_page = $this->total_pages;
}
elseif ($this->current_page <= 0)
{
$abs = abs($this->current_page);
$this->current_page = ($this->current_page < 0 ? $abs : $abs + 1);
}
}
/**
* previous page
* @return integer
*/
private function prevPage()
{
return $this->current_page - 1;
}
/**
* next page
* @return integer
*/
private function nextPage()
{
return $this->current_page + 1;
}
/**
* show part of the records => for example: 1 - 10 of 200
*/
public function recordsInfo()
{
$var = $this->current_page * $this->items_per_page;
$sectionEnd = $var;
$sectionStart = $sectionEnd - $this->items_per_page + 1;
$sectionEnd = ($var > $this->total_records ? $this->total_records : $var);
echo 'Showing ' . $sectionStart . ' to ' . $sectionEnd . ' of ' . $this->total_records . ' entries';
}
/**
* show current page of all pages
*/
public function pagesInfo()
{
echo 'Page ' . $this->current_page . ' of ' . $this->total_pages;
}
/**
* get query limit
* @return array Return start and end section for query limit
*/
public function limit()
{
$start = $this->items_per_page * ($this->current_page - 1);
$limit = $this->items_per_page;
return array('start' => $start, 'limit' => $limit);
}
/**
* show paging
*/
public function display()
{
echo $this->output;
}
}
نحوه ی استفاده:
<?php
include_once 'pagination.php';
mysql_connect('localhost', 'root', '');
mysql_select_db('pagination');
mysql_query('set names 'utf8'');
$total = mysql_query('select count(*) as `total` from posts');
$result = mysql_fetch_assoc($total);
$paging = new Pagination(
array(
'items_per_page' => 5,
'total_records' => $result['total'],
'url_address' => 'http://example.com/?page=',
'current_page' => (isset($_GET['page']) ? $_GET['page'] : 1),
//'mode' => true,
)
);
//$start = $paging->items_per_page * ($paging->current_page - 1);
//$limit = $paging->items_per_page;
$section = $paging->limit();
$start = $section['start'];
$limit = $section['limit'];
$result = mysql_query("select * from posts LIMIT $start, $limit");
while($row = mysql_fetch_assoc($result))
{
echo '<strong>' . $row['title'] . '</strong><hr>';
}
// display
$paging->display();
echo '<br>';
$paging->recordsInfo();
echo '<hr>';
$paging->pagesInfo();
?>
فایل style:
کد:
*
{
direction: ltr;
}
.paging
{
margin: 65px auto;
padding: 0;
list-style: none;
}
.paging li
{
float: left;
margin-left: 10px;
}
.paging li a
{
display: block;
text-decoration: none;
color: #717171;
font-family: tahoma;
font-size: 9pt;
text-shadow: 0px 1px white;
padding: 5px 8px;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
-webkit-box-shadow: 0px 1px 3px 0px rgba(0,0,0,0.35);
-moz-box-shadow: 0px 1px 3px 0px rgba(0,0,0,0.35);
box-shadow: 0px 1px 3px 0px rgba(0,0,0,0.35);
background-color: #e5e5e5;
background: -webkit-linear-gradient(top, #e5e5e5 0%, #e8e8e8 100%);
background: -moz-linear-gradient(top, #e5e5e5 0%, #e8e8e8 100%);
background: -o-linear-gradient(top, #e5e5e5 0%, #e8e8e8 100%);
background: -ms-linear-gradient(top, #e5e5e5 0%, #e8e8e8 100%);
background: linear-gradient(top, #e5e5e5 0%, #e8e8e8 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#e5e5e5', endColorstr='#e8e8e8',GradientType=0 );
}
.paging li a.current-page
{
color: white;
text-shadow: 0px 1px #3f789f;
-webkit-box-shadow: 0px 1px 2px 0px rgba(0,0,0,0.8);
-moz-box-shadow: 0px 1px 2px 0px rgba(0,0,0,0.8);
box-shadow: 0px 1px 2px 0px rgba(0,0,0,0.8);
background: #7cb9e5;
background: -webkit-linear-gradient(top, #7cb9e5 0%, #57a1d8 100%);
background: -moz-linear-gradient(top, #7cb9e5 0%, #57a1d8 100%);
background: -o-linear-gradient(top, #7cb9e5 0%, #57a1d8 100%);
background: -ms-linear-gradient(top, #7cb9e5 0%, #57a1d8 100%);
background: linear-gradient(top, #7cb9e5 0%, #57a1d8 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#7cb9e5', endColorstr='#57a1d8',GradientType=0 );
}
.paging li a:hover
{
-webkit-box-shadow: 0px 1px 3px 0px rgba(0,0,0,0.55);
-moz-box-shadow: 0px 1px 3px 0px rgba(0,0,0,0.55);
box-shadow: 0px 1px 3px 0px rgba(0,0,0,0.55);
background: #fff;
background: -webkit-linear-gradient(top, #fff 0%, #e8e8e8 100%);
background: -moz-linear-gradient(top, #fff 0%, #e8e8e8 100%);
background: -o-linear-gradient(top, #fff 0%, #e8e8e8 100%);
background: -ms-linear-gradient(top, #fff 0%, #e8e8e8 100%);
background: linear-gradient(top, #fff 0%, #e8e8e8 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#fff', endColorstr='#e8e8e8',GradientType=0 );
}
.paging li a:active, .paging li a.current-page:active
{
-webkit-box-shadow: inset 0px 1px 3px 0px rgba(0,0,0,0.5), 0px 1px 1px 0px rgba(255,255,255,1) !important;
-moz-box-shadow: inset 0px 1px 3px 0px rgba(0,0,0,0.5), 0px 1px 1px 0px rgba(255,255,255,1) !important;
box-shadow: inset 0px 1px 3px 0px rgba(0,0,0,0.5), 0px 1px 1px 0px rgba(255,255,255,1) !important;
}
.paging li a.current-page:hover
{
-webkit-box-shadow: 0px 1px 2px 0px rgba(0,0,0,0.9);
-moz-box-shadow: 0px 1px 2px 0px rgba(0,0,0,0.9);
box-shadow: 0px 1px 2px 0px rgba(0,0,0,0.9);
background: #99cefc;
background: -webkit-linear-gradient(top, #99cefc 0%, #57a1d8 100%);
background: -moz-linear-gradient(top, #99cefc 0%, #57a1d8 100%);
background: -o-linear-gradient(top, #99cefc 0%, #57a1d8 100%);
background: -ms-linear-gradient(top, #99cefc 0%, #57a1d8 100%);
background: linear-gradient(top, #99cefc 0%, #57a1d8 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#99cefc', endColorstr='#57a1d8',GradientType=0 );
}
پیش نمایش
--------------
فرم Url هاتون به هر شکلی هست در زمان ساخت آبجکت باید مشخص کنید که در مثال اومده.
ارسالها: 3,701
موضوعها: 140
تاریخ عضویت: اردیبهشت 1394
اعتبار:
134
تشکرها: 195
3447 بار تشکر شده در 2120 پست
کلاس خیلی خوبی نوشتین. پیشنهاد میکنم در بخش Snippet های PHP قرارش بدین.
|