Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как вывести например только 10 номеров страниц из 
:(
    Опции темы
Гриша
  Дата 30.12.2005, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НУС(незнаю|узнаю|создаю)
*


Профиль
Группа: Участник
Сообщений: 181
Регистрация: 12.6.2005
Где: Земля, Москва, Хр ущевка

Репутация: 1
Всего: 1



Здравствуйте.
Приведенная ниже часть скрипта выводит номера страниц в виде ссылок.
Прошу вас помочь мне в том, чтобы например если у меня всего 30 страниц, то возможно было выводить например по 10 номеров страниц, тут возможно 2 варианта:
1) либо например пользователь нажимает на страницу 2 и тогда отображаются страницы со 2 по 10
2) либо когда пользовательнапример переходит на 10 страницу, то отображаются страницы с 10 по 20.
Вот как-то хотелось бы преобразовать вывод.

Код

// количество записей, выводимых на странице 
$per_page=10; 

// дальше выводим ссылки на страницы: 
$q="SELECT count(*) FROM `table`"; 
$res=mysql_query($q); 
$row=mysql_fetch_row($res); 
$total_rows=$row[0]; 

$num_pages=ceil($total_rows/$per_page); 

for($i=1;$i<=$num_pages;$i++) { 
  if ($i-1 == $page) { 
    echo $i." "; 
  } else { 
    echo '<a href="'.$_SERVER['PHP_SELF'].'?page='.$i.'">'.$i."</a> "; 
  } 
}



$num_pages - как раз выводит количество страниц, вот я пробовла в цикле делать условие if ($num_pages<=10), но что-то это не то.

Это сообщение отредактировал(а) Гриша - 30.12.2005, 17:57
--------------------
Если долго мучиться, что-нибудь получитЬся.
PM MAIL WWW   Вверх
Гриша
Дата 30.12.2005, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НУС(незнаю|узнаю|создаю)
*


Профиль
Группа: Участник
Сообщений: 181
Регистрация: 12.6.2005
Где: Земля, Москва, Хр ущевка

Репутация: 1
Всего: 1



Код

if (isset($_GET['page'])) $page=($_GET['page']-1); else $page=0;  
// или if ((!empty($_GET['page'])) && ($_GET['page'] > 0)) {$page=$_GET['page']-1;} else {$page=0;} 

$num_pages=ceil($total_rows/$per_page);    

$pergroup = 10;   

$groupnumber = floor($page/$pergroup);   
//for($i=1;$i<=$num_pages;$i++)    
for($i=$groupnumber*$pergroup;$i<$groupnumber*$pergroup+10;$i++) {    
  if ($i-1 == $page) {    
    echo $i." ";    
  } else {    
    echo '<a href="'.$_SERVER['PHP_SELF'].'?page='.$i.'">'.$i."</a> ";    
  }    
}



Почти все получается, но нумерация страниц начинает с 0, поэтому с начала иде так 0 ....... 9, на десятую страницу я могу попасть только нажав кнопку следующая, когда я попадаю на 10 страницу то нумерация страниц отображается также 0 ...... 9, при попадании на 11 страницу, нумерация идет так 10 ..... 17 - УЧИТЫВАЯ ЧТО ВСЕГо У МЕНЯ 18 страниц.

Это сообщение отредактировал(а) Гриша - 30.12.2005, 17:55
--------------------
Если долго мучиться, что-нибудь получитЬся.
PM MAIL WWW   Вверх
Mal Hack
Дата 30.12.2005, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Гриша это математика... Внимательно продумай алгоритм..
PM ICQ   Вверх
Гриша
Дата 30.12.2005, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НУС(незнаю|узнаю|создаю)
*


Профиль
Группа: Участник
Сообщений: 181
Регистрация: 12.6.2005
Где: Земля, Москва, Хр ущевка

Репутация: 1
Всего: 1



Я с утра думаю с 12:30, вот ка раз только отдохнул, блин и никак не придумаю.
--------------------
Если долго мучиться, что-нибудь получитЬся.
PM MAIL WWW   Вверх
Mal Hack
Дата 30.12.2005, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Код

<?php

$per = 10;
$all = 35;
$cur = 14;

$start = floor( $cur / $per ) * $per;
$end   = $start + ( ( $all - $start < $per ) ? $all - $start : 10 );

for( $i = $start ; $i < $end ; $i++ )
 {
  print $i . "<br />";
 }

?>

PM ICQ   Вверх
Гриша
Дата 2.1.2006, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НУС(незнаю|узнаю|создаю)
*


Профиль
Группа: Участник
Сообщений: 181
Регистрация: 12.6.2005
Где: Земля, Москва, Хр ущевка

Репутация: 1
Всего: 1



Mal Hack, спасибо за помощь.
Я всетаки сделал вывод страниц таким образом, вот полный php код.

Страницы выводятся таким образом.
К примеру у нас 30 страниц, и мы хотим выводить по 10 страниц:
# Первые 10, при нажатии на ... попадаем на следующие 10
1 2 3 4 5 6 7 8 9 10 ...
<< следующая предыдущая >>
# Вторые 10, при нажатии на ... попадаем на предыдущие 10 или нажимаем на ..., которые спарва, попадаем на следущие 10
... 11 12 13 14 15 16 17 18 19 20 ...
<< следующая предыдущая >>
# Третьи 10, при нажатии на ... попадаем на предыдущие 10
... 21 22 23 24 25 26 27 28 29 30
<< следующая предыдущая >>

Достаточно поменять $pergroup на нужное кол-во страниц в блоке и все, красота.

============================================

Код

// количество записей, выводимых на странице 
$per_page=10; 
// получаем номер страницы 
if (isset($_GET['page']) && ($_GET['page'] > 0)) $page=($_GET['page']-1); else $page=0; // Мленькое добавленице  && ($_GET['page'] > 0) - так, что если страница равна 0 или -1 и т.д., то отбражается первая страница 
// вычисляем первый оператор для LIMIT 
$start=abs($page*$per_page); 
// составляем запрос и выводим записи 
// переменную $start используем, как нумератор записей. 
$q="SELECT * FROM `table` ORDER BY field LIMIT $start,$per_page"; 
$res=mysql_query($q); 
while($row=mysql_fetch_array($res)) { 
  echo ++$start.". ".$row['field']."<br>\n"; 
} 

// дальше выводим ссылки на страницы: 
$q="SELECT count(*) FROM `table`"; 
$res=mysql_query($q); 
$row=mysql_fetch_row($res); 
$total_rows=$row[0]; 
$num_pages=ceil($total_rows/$per_page); 

$pergroup=10; //Определяем кол-во выводимых страниц в группе 
$groupnumber = floor($page/$pergroup); //Определяем номер группы из указанного кол-ва страниц 
$gropuprevious = $groupnumber*$pergroup; //Определяем предыдущую страницу текущей группы  
$groupnext = min($groupnumber*$pergroup+$pergroup,$num_pages); //Определяем следующую страницу после текущей группы 

if ($gropuprevious>=$pergroup) //Выводим ссылку предыдущей страницы текущей группы 
echo '<a href="'.ereg_replace('index.php', '', $_SERVER['PHP_SELF']).'?page='.$gropuprevious.'">...</a> '; 

for($i=$gropuprevious+1;$i<=$groupnext;$i++) //Выводим страницы в виде ссылок по группам в указанном кол-ве, текущие страницы выводим без ссылок 
//for($i=1;$i<=$num_pages;$i++) { 
  if ($i-1 == $page) { 
    echo $i." "; 
  } else { 
    echo '<a href="'.$_SERVER['PHP_SELF'].'?page='.$i.'">'.$i."</a> "; 
  } 
} 

if ($groupnext<$num_pages) //Вывожу ссылку на следующу страницу после текущей группы 
echo '<a href="'.ereg_replace('index.php', '', $_SERVER['PHP_SELF']).'?page='.($groupnext+1).'">...</a> '; 

echo '<br>'; 

if ($page+1>1) //Если страница не последня, то вывожу кнопку previous (предыдущая) 
 { 
echo '<a href="'.ereg_replace('index.php', '', $_SERVER['PHP_SELF']).'?page='.$page.'"><< предыдущая</a> &nbsp;'; 
 } 
elseif ($num_pages>1) //Если страница одна то не выводим эту ссылку     
echo '<< предыдущая &nbsp;';  

if ($page+1<$num_pages) //Если страница не последня, то вывожу кнопку next (следующая) 
{ 
echo '<a href="'.ereg_replace('index.php', '', $_SERVER['PHP_SELF']).'?page='.($page+2).'">cледующая >></a>'; 
} 
elseif ($num_pages>1) //Если страница одна то не выводим эту ссылку     
echo 'cледующая >>';

--------------------
Если долго мучиться, что-нибудь получитЬся.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0473 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.