|
|
|
| Подскажите пожалуйста как вывести все страницы а не только шесть? спасибо...
/*Код постраничной навигации*/
$result77 = mysql_query("SELECT str FROM options_index", $db);
$myrow77 = mysql_fetch_array($result77);
$num = $myrow77["str"];
// Извлекаем из URL текущую страницу
@$page = $_GET['page'];
// Определяем общее число сообщений в базе данных
$result00 = mysql_query("SELECT COUNT(*) FROM data WHERE secret=0");
$temp = mysql_fetch_array($result00);
$posts = $temp[0];
// Находим общее число страниц
$total = (($posts - 1) / $num) + 1;
$total = intval($total);
// Определяем начало сообщений для текущей страницы
$page = intval($page);
// Если значение $page меньше единицы или отрицательно
// переходим на первую страницу
// А если слишком большое, то переходим на последнюю
if(empty($page) or $page < 0) $page = 1;
if($page > $total) $page = $total;
// Вычисляем начиная с какого номера
// следует выводить сообщения
$start = $page * $num - $num;
// Выбираем $num сообщений начиная с номера $start
Error_Reporting(E_ALL & ~E_NOTICE);
// Проверяем нужны ли стрелки назад
if ($page != 1) $pervpage = '<a href=new.php?new='.$new.'&page=1>Первая</a> | <a href=new.php?new='.$index.'&page='. ($page - 1) .'>Предыдущая</a> | ';
// Проверяем нужны ли стрелки вперед
if ($page != $total) $nextpage = ' | <a href=new.php?new='.$index.'&page='. ($page + 1) .'>Следушая</a> | <a href=new.php?new='.$index.'&page=' .$total. '>Последняя</a>';
// Находим две ближайшие станицы с обоих краев, если они есть
if($page - 5 > 0) $page5left = ' <a href=new.php?new='.$new.'&page='. ($page - 5) .'>'. ($page - 5) .'</a> | ';
if($page - 4 > 0) $page4left = ' <a href=new.php?new='.$new.'&page='. ($page - 4) .'>'. ($page - 4) .'</a> | ';
if($page - 3 > 0) $page3left = ' <a href=new.php?new='.$new.'&page='. ($page - 3) .'>'. ($page - 3) .'</a> | ';
if($page - 2 > 0) $page2left = ' <a href=new.php?new='.$new.'&page='. ($page - 2) .'>'. ($page - 2) .'</a> | ';
if($page - 1 > 0) $page1left = '<a href=new.php?new='.$new.'&page='. ($page - 1) .'>'. ($page - 1) .'</a> | ';
if($page + 5 <= $total) $page5right = ' | <a href=new.php?new='.$new.'&page='. ($page + 5) .'>'. ($page + 5) .'</a>';
if($page + 4 <= $total) $page4right = ' | <a href=new.php?new='.$new.'&page='. ($page + 4) .'>'. ($page + 4) .'</a>';
if($page + 3 <= $total) $page3right = ' | <a href=new.php?new='.$new.'&page='. ($page + 3) .'>'. ($page + 3) .'</a>';
if($page + 2 <= $total) $page2right = ' | <a href=new.php?new='.$new.'&page='. ($page + 2) .'>'. ($page + 2) .'</a>';
if($page + 1 <= $total) $page1right = ' | <a href=new.php?new='.$new.'&page='. ($page + 1) .'>'. ($page + 1) .'</a>';
// Вывод меню если страниц больше одной
if ($total > 1)
{
Error_Reporting(E_ALL & ~E_NOTICE);
echo "<div class=\"pstrnav\">";
echo $pervpage.$page5left.$page4left.$page3left.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$page3right.$page4right.$page5right.$nextpage;
echo "</div>";
}
|
| |
|
|
|
|
|
|
|
для: bigpit
(01.02.2012 в 20:22)
| | если всё выводить, то постраничная навигация не нужна | |
|
|
|
|
|
|
|
для: ladan
(01.02.2012 в 22:05)
| | я тоже сначала ответил так, но потом догадался что речь не о числе блоков на страницу, а о самих страницах которые внизу отображаются ссылками | |
|
|
|
|
|
|
|
для: bigpit
(01.02.2012 в 20:22)
| | Делюсь готовым классом:
class.pagination.php:
<?
class pagination {
var $coreclass;
public $step = 20;
public $start = 0;
public $total_items;
public $on_this_page;
function __construct() {
}
public function init( $total_items, $step=20 )
{
$this->total_items = $total_items;
$showall = ( isset($_GET['page']) && $_GET['page'] == 'showall' && $this->total_items < 1000 ) ? true : false;
$this->step = $step;
$stages = 3;
$this->current_page = ( isset($_GET['page']) && (int) $_GET['page'] > 0 ) ? (int) $_GET['page'] : 1;
if($this->current_page)
{
$this->start = ($this->current_page - 1) * $this->step;
} else {
$this->start = 0;
}
$this->on_this_page = ( $this->start + $this->step > $this->total_items ) ? $this->total_items - $this->start : $this->step;
// Initial page num setup
if ($this->current_page == 0){$this->current_page = 1;}
$prev = $this->current_page - 1;
$next = $this->current_page + 1;
$lastpage = ceil($this->total_items/$this->step);
$LastPagem1 = $lastpage - 1;
if( $showall ) $this->on_this_page = $this->total_items;
$paginate = '<div class="paginate"><span class="desc">Показано записей: ' . $this->on_this_page . ' из ' . $this->total_items . '</span>';
$targetpage = $this->buildQueryString( array('page') );
if($lastpage > 1)
{
// Previous
if ($this->current_page > 1){
$paginate.= "<a href='$targetpage&page=$prev'>← назад</a>";
}
else
{
$paginate.= "<span class='disabled'>← назад</span>";
}
// Pages
if ($lastpage < 7 + ($stages * 2)) // Not enough pages to breaking it up
{
for ($counter = 1; $counter <= $lastpage; $counter++)
{
if ($counter == $this->current_page && !$showall){
$paginate.= "<span class='current'>$counter</span>";
}else{
$paginate.= "<a href='$targetpage&page=$counter'>$counter</a>";}
}
}
elseif($lastpage > 5 + ($stages * 2)) // Enough pages to hide a few?
{
// Beginning only hide later pages
if($this->current_page < 1 + ($stages * 2))
{
for ($counter = 1; $counter < 4 + ($stages * 2); $counter++)
{
if ($counter == $this->current_page && !$showall){
$paginate.= "<span class='current'>$counter</span>";
}else{
$paginate.= "<a href='$targetpage&page=$counter'>$counter</a>";}
}
$paginate.= "...";
$paginate.= "<a href='$targetpage&page=$LastPagem1'>$LastPagem1</a>";
$paginate.= "<a href='$targetpage&page=$lastpage'>$lastpage</a>";
}
// Middle hide some front and some back
elseif($lastpage - ($stages * 2) > $this->current_page && $this->current_page > ($stages * 2))
{
$paginate.= "<a href='$targetpage&page=1'>1</a>";
$paginate.= "<a href='$targetpage&page=2'>2</a>";
$paginate.= "...";
for ($counter = $this->current_page - $stages; $counter <= $this->current_page + $stages; $counter++)
{
if ($counter == $this->current_page && !$showall){
$paginate.= "<span class='current'>$counter</span>";
}else{
$paginate.= "<a href='$targetpage&page=$counter'>$counter</a>";}
}
$paginate.= "...";
$paginate.= "<a href='$targetpage&page=$LastPagem1'>$LastPagem1</a>";
$paginate.= "<a href='$targetpage&page=$lastpage'>$lastpage</a>";
}
// End only hide early pages
else
{
$paginate.= "<a href='$targetpage&page=1'>1</a>";
$paginate.= "<a href='$targetpage&page=2'>2</a>";
$paginate.= "...";
for ($counter = $lastpage - (2 + ($stages * 2)); $counter <= $lastpage; $counter++)
{
if ($counter == $this->current_page && !$showall){
$paginate.= "<span class='current'>$counter</span>";
}else{
$paginate.= "<a href='$targetpage&page=$counter'>$counter</a>";}
}
}
}
if( $this->total_items < 1000 )
{
if( $showall )
{
$paginate.= "<span class='current'>ВСЕ</span>";
}
else
{
$paginate.= "<a href='$targetpage&page=showall'>ВСЕ</a>";
}
}
// Next
if ($this->current_page < $counter - 1){
$paginate.= "<a href='$targetpage&page=$next'>далее →</a>";
}
else
{
$paginate.= "<span class='disabled'>далее →</span>";
}
}
$paginate.= "</div>";
if( $showall ) $this->step = $this->total_items;
return array(
'html' => $paginate,
'on_this_page' => $this->on_this_page,
'total_items' => $this->total_items
);
}
private function buildQueryString( $remove_params=array(), $add_params=array() )
{
$qs = $_GET;
foreach( $remove_params as $rp ) unset($qs[$rp]);
$qs = array_merge($qs, $add_params);
foreach($qs as $key => $val) $qsr[] = $key . '=' . urlencode($val);
$qsr = ( isset($qsr) && count($qsr) ) ? '?'.implode('&', $qsr) : '';
return $_SERVER['SCRIPT_NAME'] . $qsr;
}
}
?>
|
Использование простое.
Пример:
<?
require( 'class.pagination.php');
$paginationClass = new pagination;
$total_items_count = mysql_query("SELECT count(*) as num FROM table");
$total_items_count = mysql_fetch_assoc($total_items_count);
$total_items_count = $total_items_count['num'];
$pagination_html = $paginationClass->init( $total_items_count, 30 );
$q = mysql_query("SELECT count(*) as num FROM table LIMIT " . $paginationClass->start . ", " . $paginationClass->step . ";");
...
?>
|
Пример CSS:
/* Pagination */
.paginate {
padding: 3px 0px;
margin: 3px 0px;
float: right;
}
.paginate .desc {
color: gray;
padding: 5px 5px;
}
.paginate a {
background-color: #f5f5f5;
padding:2px 5px 2px 5px;
margin:2px;
border:1px solid #999;
text-decoration:none;
color: #666;
}
.paginate a:hover, .paginate a:active {
border: 1px solid #999;
color: #000;
}
.paginate span.current {
margin: 2px;
padding: 2px 5px 2px 5px;
border: 1px solid #999;
font-weight: bold;
background-color: #999;
color: #FFF;
}
.paginate span.disabled {
padding:2px 5px 2px 5px;
margin:2px;
border:1px solid #eee;
color:#DDD;
}
|
| |
|
|
|
|
|
|
|
для: DDK
(02.02.2012 в 00:56)
| | Тут проверка отключает кнопку "ВСЕ", если общее количество записей больше 1000, проверку эту можно убрать при желании:
...
if( $this->total_items < 1000 )
{
if( $showall )
{
$paginate.= "<span class='current'>ВСЕ</span>";
}
else
{
$paginate.= "<a href='$targetpage&page=showall'>ВСЕ</a>";
}
}
...
|
| |
|
|
|