Автор Тема: постраничный вывод своими кривыми руками  (Прочитано 5251 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн scasic

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 29
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
критикуйте пожалуйста

Код:

// Переменные
$links_number=3// коли-во ссылок на странице
$lines_number=7// кол-во строк на странице

// Проверяем данные от броузера
if (!isset($a)){$a=0;} // где $a - идентификатор для LIMIT

// Подключение к базе данных
$db=mysql_connect ("localhost","user","user");
if (!
$db){
echo 
"Ошибка при соединении с базой данных";
}
mysql_select_db("base");

// получаем количество строк
$query "SELECT * FROM table WHERE zapros=\'$do\'";
$result MYSQL_QUERY($query);
$number MYSQL_NUMROWS($result);

//проверка наличия идентификатора страницы
if (!isset($page)){$page="0";}

// получаем общее кол-во страниц для вывода
$number_of_pages=$number/($links_number*$lines_number);
$number_of_pages1=(int)$number_of_pages;
if (
$number_of_pages>$number_of_pages1){$number_of_pages=$number_of_pages1+1;}

// получаем количество общее кол-во ссылок
$number_of_links=$number/$lines_number;
$number_of_links1=(int)$number_of_links;
if (
$number_of_links>$number_of_links1){$number_of_links=$number_of_links1+1;}

// проверяем сколько ссылок на последней странице
if ($page==($number_of_pages-1)){
$cycle=($links_number-(($number_of_pages*$links_number)-$number_of_links));
}
else {
$cycle=$links_number;}

$z=$page*$links_number*$lines_number;

// создаем навигационное меню с сылками
for ($i=1$i <= $cycle$i++){
if (
$i==$pn){$link $link."[".($z+1)."..".($z+$lines_number)."] ";}
else {
$link $link."<a
href=\\"
?do=$do&tab=$tab&sort=$sort&a=$z&page=$page&pn=$i\\">[".($z+1)."..".($z+$lines_number)."]</a> ";}

// ссылки "следующие" справа и "предыдущие" слева
if ($i==$cycle){
if (
$page=="0"){$lgo="";}
else {
$lpage=$page-1;
      
$lz=$z-($lines_number*$links_number);
      
$lgo="<a
href=\\"
?do=$do&tab=$tab&sort=$sort&a=$lz&page=$lpage&pn=$links_number\\"><<</a> ";}
if (
$page==($number_of_pages-1)){$rgo="";}
else {
$rpage=$page+1;
      
$rz=$z+$lines_number;
      
$rgo="<a href=\\"?do=$do&tab=$tab&sort=$sort&a=$rz&page=$rpage&pn=1\\">>></a>";}    
$link=$lgo.$link.$rgo;}

$z=$z+$lines_number;
}                                        


// извлекаем информацию из базы данных
$query "SELECT * FROM table WHERE zapros=\'$do\' ORDER BY $sort LIMIT $a,$lines_number";

Оффлайн Alexandr

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 865
  • +0/-0
  • 0
    • Просмотр профиля
    • http://gtp.hobi.ru
постраничный вывод своими кривыми руками
« Ответ #1 : 10 Июля 2002, 08:39:45 »
Чё велик изобретать. Есть готовые решения:
http://detail.phpclub.net/technique/01-04-28/

Хотя не везде эта беда - лучшее решение.
Т.к., например, у меня в нек. скриптах нет возможности подсчитать общее количество записей.
Kiss my CSS
Pусские gtp gp3 ( midi + tab ) -   - Все для Авто.

Оффлайн Гаррилл

  • Наглый тип
  • Постоялец
  • ***
  • Сообщений: 202
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phpbbcms.sf.net
постраничный вывод своими кривыми руками
« Ответ #2 : 10 Июля 2002, 21:33:12 »
А у меня вот так:

function multipage($num_rows_per_order$pagesize$num_articles$pageurl$page) {
                  echo 
"<center>";
	
if ( 
$num_rows_per_order $pagesize ) { 
	
$total_pages ceil($num_rows_per_order $pagesize); // How many pages are we dealing with here ??
                  
echo "$num_rows_per_order "._STORIESFOUND." ($total_pages "._PAGES.", $num_articles "._SHOWN.")

"
;
	
echo 
"[";
  if (
$num_rows_per_order >= $pagesize
  {
    
$num_rows_per_order++;
    
$pages $num_rows_per_order $pagesize;
    
$pages ceil($pages);
	

    if (
$page == $pages)
	
	
$to $pages;  } 
	
elseif (
$page == $pages-1)
	
$to $page+1; } 
	
elseif (
$page == $pages-2)
	
$to $page+2; } 
	
else
	
	
	
$to $page+3; }
    if (
$page == || $page == || $page == 3)
	
$from 1; } 
	
else   { 
$from $page-3;}
	
$prev_page $page 1;
                  if ( 
$prev_page ) {
	
$fwd_back .= "  <a href=\\"$pageurl&page=1\\">1</a>  |  ...  |  <a href=\\"$pageurl&page=$prev_page\\" title=\\""._PREVIOUSPAGE."\\"><<</a>  |";
	
} else {  
                  }
	
 for (
$i $from$i <= $to$i++) 
	
{
	
if(
$i != $page) { $fwd_back .= "  <a href=\\"$pageurl&page=$i\\">$i</a>  |"; } 
	
else { 
$fwd_back .= "  <u><b>$i</b></u>  |"; }
	
}
                  
$next_page $page 1;
                  if ( 
$next_page <= $total_pages ) {
	
$fwd_back .= "  <a href=\\"$pageurl&page=$next_page\\" title=\\""._NEXTPAGE."\\">>></a>  |  ...  |  <a href=\\"$pageurl&page=$pages\\">$pages</a> ";
	
} else {
	
}
	
echo 
"$fwd_back";
	
}
	
echo 
" ]";
	
} else {
	
echo 
"$num_rows_per_order "._STORIESFOUND."";
	
}
                  echo 
"</center>";
}


Смотреть тут http://ru-nuke.sourceforge.net/ внизу и через поиск http://ru-nuke.sourceforge.net/modules.php?name=Search
Функция используется везде одна.

Оффлайн scasic

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 29
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
постраничный вывод своими кривыми руками
« Ответ #3 : 15 Июля 2002, 13:46:03 »
Гаррилл, я у тя глюк нашел
правь

5 горячих тем на форуме
» Апдейты
смотров: 1 ответов: 0, последним ответил Pups (Понедельник, 15 Июля 2002 7:51:36)
« Последнее редактирование: 16 Июля 2002, 10:06:52 от scasic »

Оффлайн advocat

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 73
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.php.net.ua
постраничный вывод своими кривыми руками
« Ответ #4 : 15 Июля 2002, 14:22:36 »
Да оба кода неплохи, хотя у меня совсем по другому сделано, буду дома - кину код ... Там правда 2 обращения к базе, одно для кол-во второе с лимитом, что-бы не ораничивать все через for ...
заходите в гости
адвокат, это не профессия, это диагноз ! [ обитаю в PHP ]

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
постраничный вывод своими кривыми руками
« Ответ #5 : 15 Июля 2002, 14:31:39 »
вот это
$number_of_pages=$number/($links_number*$lines_number);
$number_of_pages1=(int)$number_of_pages;
if ($number_of_pages> $number_of_pages1){$number_of_pages=$number_of_pages1+1;}
заменяется на
$number_of_pages=ceil($number/($links_number*$lines_number));

И в остальных так же.
Для того, чтобы понять дальше, надо понимать, чем ссылки на странице отличаются от строк на странице. А я не понимаю, что это вообще такое.
Да и вообще - что проверять-то? Если работает - то и пусть работает. Если не работает - задавать надо конкретный вопрос.

непонятно, зачем дублировать информация. $a можно вычислить из $page.
нормальные имена переменных соседствуют с какими-то а, з.
Неохота разбираться.

Как-то у вас, ребята, уж больно наворочено...
я передаю сразу номер записи, с котрой начинать, безо всяких страниц. И все.

собственно, вся постраничка укладывается в несколько строк

$pages
=ceil($tolal_rows/$rows_per_page);
for (
$i=1$i<=$pages$i++) {
  
$from=$i*$rows-($rows-1);
  
$to=$i*$rows;
  if (
$to $total_rows$to $total_rows;
  if (
$limit==$from) echo $from,"-",$to
    else echo \
'<a href="\',$PHP_SELF,\'?limit=\',$from,\'">\',$from,"-",$to,\'</a>\';
echo " ";
}

Если выводить не номера записей, а номера страиц, то получится еще проще

$pages
=ceil($tolal_rows/$rows_per_page);
for (
$i=1$i<=$pages$i++) {
  
$from=$i*$rows-($rows-1);
  if (
$limit==$from) echo $i," "
    else echo \
'<a href="\',$PHP_SELF,\'?limit=\',$from,\'">\',$i,\'</a> \';
}

еще только в запросе писать LIMIT $limit-1, $rows_per-page
« Последнее редактирование: 15 Июля 2002, 14:39:13 от RomikChef »

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
постраничный вывод своими кривыми руками
« Ответ #6 : 15 Июля 2002, 14:43:52 »
из еще красивостей
Вместо
db=mysql_connect ("localhost","user","user");
if (!$db){
echo "Ошибка при соединении с базой данных";
}
пишется
mysql_connect ("localhost","user","user") or die("Ошибка при соединении с базой данных");
Если не хочешь die, то пиши просто echo. Но убивать скрипт предпочтительней - все равно ничего работать не будет уже.

Оффлайн scasic

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 29
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
постраничный вывод своими кривыми руками
« Ответ #7 : 16 Июля 2002, 10:04:48 »
RomikChef весьма и весьма поучительно
thanx

Оффлайн scasic

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 29
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
постраничный вывод своими кривыми руками
« Ответ #8 : 16 Июля 2002, 12:58:48 »
2RomikChef
Цитировать
заменяется на
$number_of_pages=ceil($number/($links_number*$lines_number));


правда здорово, выигрыш на лицо (я знал что есть такая функция, но в тех книжках которые имеются на руках про нее ничего не сказано)

Цитировать
Для того, чтобы понять дальше, надо понимать, чем ссылки на странице отличаются от строк на странице.

Здесь я имел ввиду следующее:

$links_number
=3// кол-во ссылок в навигационном меню
$lines_number=7// кол-во строк полученных из базы и отображенных на странице

надеюсь теперь этот момент стал более прозрачным

Цитировать
Да и вообще - что проверять-то?

Проверять безграмотность и поучать чтобы больше неповадно было всякие навароченные глупости писать :) вот видишь сколько полезного и рационального ты уже внес в этот код

Оффлайн Гаррилл

  • Наглый тип
  • Постоялец
  • ***
  • Сообщений: 202
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phpbbcms.sf.net
постраничный вывод своими кривыми руками
« Ответ #9 : 16 Июля 2002, 13:03:43 »
scasic
Это не глюк.

 

Sitemap 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