Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Постраничная навигация

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
LifePlay
Отправлено: 14 Октября, 2010 - 15:16:58
Post Id



Частый гость


Покинул форум
Сообщений всего: 135
Дата рег-ции: Авг. 2010  
Откуда: Кобеляки, Украина


Помог: 0 раз(а)




Писал постраничную навигацию

Мне надо чтобы были ссылки на первые и последние 3 страницы, а также на 3 предыдущие и 3 следующие от активной страницы

Всё работает ну смущает то, что огромный код получился
Посмотрите если есть время, и подскажите, если есть более простой способ.

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. #LifePlay# Постраничная навигация. Требуется  “$page=текущая страница” ”$pages=количество страниц”
  3.  
  4. //если $pages<=6
  5. if ($pages<=6){
  6.  
  7. for ($i=1; $i<=$pages; $i++) {
  8. if ($i==$page) echo $page;
  9. else
  10. echo '<a href=index.php?d='.$d.'&page='.($i).'>'.($i).'</a>';
  11. }
  12.  
  13. echo '<br/>';}
  14. //если $pages>=7 and $pages<13
  15. if ($pages>=7 and $pages<13){
  16.  
  17. if ($page+3<$pages-2){
  18.  
  19. for ($i=1; $i<=$page+3; $i++){
  20. if ($i==$page) echo $page;
  21. else
  22. echo '<a href=index.php?d='.$d.'&page='.($i).'>'.($i).'</a>';
  23. }
  24. echo '...';
  25. for ($i=$pages-2; $i<=$pages; $i++){
  26. echo '<a href=index.php?d='.$d.'&page='.($i).'>'.($i).'</a>';
  27. }
  28. }
  29.  
  30. if ($page>=$pages-5){
  31.        
  32.         if($page>=7){
  33.        
  34.         for ($i=1; $i<=3; $i++){
  35.         echo '<a href=index.php?d='.$d.'&page='.($i).'>'.($i).'</a>';
  36.         }
  37.         echo '...';
  38.         for ($i=$page-3; $i<=$pages; $i++){
  39.         if ($i==$page) echo $page;
  40.         else
  41.         echo '<a href=index.php?d='.$d.'&page='.($i).'>'.($i).'</a>';
  42.         }
  43.         }
  44.        
  45.         if($page<7){
  46.        
  47.         for ($i=1; $i<=$pages; $i++){
  48.         if ($i==$page) echo $page;
  49.         else
  50.         echo '<a href=index.php?d='.$d.'&page='.($i).'>'.($i).'</a>';
  51.         }
  52.         }
  53. }
  54.  
  55. echo '<br/>';}
  56. //если $pages>=13
  57. if ($pages>=13){
  58.  
  59. if ($page<=6){
  60.  
  61. for ($i=1; $i<=$page+3; $i++){
  62. if ($i==$page) echo $page;
  63. else
  64. echo '<a href=index.php?d='.$d.'&page='.($i).'>'.($i).'</a>';
  65. }
  66. echo '.. ..';
  67. for ($i=$pages-2; $i<=$pages; $i++){
  68. echo '<a href=index.php?d='.$d.'&page='.($i).'>'.($i).'</a>';
  69. }
  70. }
  71.  
  72. if ($page>=7 and $page<$pages-5){
  73.  
  74. for ($i=1; $i<=3; $i++){
  75. echo '<a href=index.php?d='.$d.'&page='.($i).'>'.($i).'</a>';
  76. }
  77. echo '..';
  78. for ($i=$page-3; $i<=$page+3; $i++){
  79. if ($i==$page) echo $page;
  80. else
  81. echo '<a href=index.php?d='.$d.'&page='.($i).'>'.($i).'</a>';
  82. }
  83. echo '..';
  84. for ($i=$pages-2; $i<=$pages; $i++){
  85. echo '<a href=index.php?d='.$d.'&page='.($i).'>'.($i).'</a>';
  86. }
  87. }
  88.  
  89. if ($page>=$pages-5){
  90.  
  91. for ($i=1; $i<=3; $i++){
  92. echo '<a href=index.php?d='.$d.'&page='.($i).'>'.($i).'</a>';
  93. }
  94. echo '.. ..';
  95. for ($i=$page-3; $i<=$pages; $i++){
  96. if ($i==$page) echo $page;
  97. else
  98. echo '<a href=index.php?d='.$d.'&page='.($i).'>'.($i).'</a>';
  99. }
  100. }
  101.  
  102. echo '<br/>';}
  103. ?>
 
 Top
Uchkuma
Отправлено: 14 Октября, 2010 - 15:25:46
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


Помог: 6 раз(а)




В ваш код особо не всматривался, но вот у меня тоже сделана навигация, только 3х3х3 (у вас 3х7х3). Так вот объем кода 1 в 1 Улыбка
 
 Top
LifePlay
Отправлено: 14 Октября, 2010 - 15:29:37
Post Id



Частый гость


Покинул форум
Сообщений всего: 135
Дата рег-ции: Авг. 2010  
Откуда: Кобеляки, Украина


Помог: 0 раз(а)




Ясно. Улыбка
 
 Top
black_ru
Отправлено: 16 Октября, 2010 - 23:46:26
Post Id


Новичок


Покинул форум
Сообщений всего: 50
Дата рег-ции: Окт. 2010  


Помог: 0 раз(а)




Код не мой, но думаю, автор простит, так как лицензия сродни GPL, но строк вроде меньше, хотя и реализация проще. Выдает "предыдущая", "следующая", также переход по номерам станиц в середине, который смело можно выкинуть или дописать. Улыбка
CODE (htmlphp):
скопировать код в буфер обмена
  1. <?
  2.         $startpage=$_GET['page'];
  3.         $xnews=file(NEWS_FILE);
  4.         $xnews=array_reverse($xnews);
  5.         $startpage-=1;
  6.         $ubound=count($xnews);
  7.         if($startpage<0 || $startpage>=$ubound/PERPAGE) $startpage=0;
  8.         if (PERPAGE<$ubound)
  9.         if($startpage==0) echo "< previous | &nbsp;";
  10.         else    echo "< <a href=".$_SERVER['PHP_SELF']."?page=$startpage>previous</a> | &nbsp;";
  11. //Это
  12.         if($ubound>PERPAGE)
  13.         for($j=1;$j<=ceil($ubound/PERPAGE);$j++) {
  14.         if($j==$startpage+1)
  15.                 echo "$j &nbsp;";
  16.         else
  17.                 echo "<a href=".$_SERVER['PHP_SELF']."?page=$j>$j</a> &nbsp;";
  18.         }
  19. //Лишнее
  20.         if(PERPAGE<$ubound)
  21.         if($startpage+1>=$ubound/PERPAGE) echo "&nbsp; | next >";
  22.         else    echo "&nbsp; | <a href=".$_SERVER['PHP_SELF']."?page=".($startpage+2).">next</a> >";
  23.         for($i=$startpage*PERPAGE;$i<$startpage*PERPAGE+PERPAGE && $i<$ubound;$i++)
  24.         {
  25.         if(ENCODING=='yes') $xnews[$i]=base64_decode($xnews[$i]);
  26.         $crtsplit="";
  27.         $crtsplit=explode("%~#",$xnews[$i]);
  28.         echo "<table border=\"1\" cellspacing=\"0\"><tr><td width=\"1000\" bgcolor=\"#CCCCCC\"><font color=\"0033CC\">$crtsplit[1] - posted on <b>$crtsplit[0]</b></font></td></tr>";
  29.         echo "<br><tr><td>$crtsplit[2]";
  30.         echo "</td></tr></table>";
  31.         }
  32. echo "<font size=\"1\">news powered by <a href=\"http://www.planetsourcecode.com/vb/scripts/ShowCode.asp?txtCodeId=1034&lngWId=8\"> phpZvon 1.2</a> - copyright (c)2003 Andrei Besleaga</font>";
  33.  
  34. ?>
 
 Top
Script
Отправлено: 17 Октября, 2010 - 06:40:07
Post Id


Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Июль 2010  


Помог: 0 раз(а)




хех

особо не внедрялся, но это же 1 листинг только?

и 10 (если не сбился) циклов Не понял

у меня на каждый лист - 3 цикла и на странице 3 листинга

9 циклов на всё

при этом текущая страница из ссылки превращается текст

но количество строк примерно такое же


и лучше не использовать такую схему вывода линков на страницы когда первые 3 и последние 3
хотя когда 20 тыс страниц может в этом и есть резон - каждый раз выводить 20 тыс )))))
но как показывает практика - чем меньше крутит цикл - тем больше кликает пользователь




пс. а когда находишься на номере страницы её линк выделяется?
 
 Top
LEONeso
Отправлено: 13 Апреля, 2011 - 14:13:34
Post Id



Посетитель


Покинул форум
Сообщений всего: 499
Дата рег-ции: Янв. 2010  
Откуда: Россия, Москва


Помог: 1 раз(а)




Народ, а как реализовывается такой листинг?
1 2 3 4 5 6 7 8 9 10 ... 23 Назад Вперед Наверх
1 ... 6 7 8 9 10 11 12 13 14 ... 23 Назад Вперед Наверх

(Отредактировано автором: 13 Апреля, 2011 - 14:51:42)



-----
Для некоторых лучший способ написать что-нибудь осмысленное - это сесть _опой на клавиатуру.
 
 Top
DeepVarvar Супермодератор
Отправлено: 13 Апреля, 2011 - 15:03:22
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




LifePlay, Uchkuma (~7)
PHP:
скопировать код в буфер обмена
  1. function paginator($page,$pages,$get) {
  2.         if ($page > 3) $paginator .= ' <a href="?'.$get.'page=1">&laquo;</a> ';
  3.         for ($i = ($page - 2); $i < ($page + 5); $i++) {
  4.                 if ($i > 0 AND $i < $pages+1) {
  5.                         if ($i == ($page + 1)) $alink = ' <b>'.$i.'</b> ';
  6.                         else $alink = ' <a href="?'.$get.'page='.$i.'">'.$i.'</a> ';
  7.                         $paginator .= $alink;
  8.                         }
  9.                 }
  10.         if ($page < $pages-4) $paginator .= ' <a href="?'.$get.'page='.$pages.'">&raquo;</a> ';
  11.         return $paginator;
  12.         }

А подвесить первую и последнюю сюда тоже можно..
 
 Top
LEONeso
Отправлено: 13 Апреля, 2011 - 15:42:41
Post Id



Посетитель


Покинул форум
Сообщений всего: 499
Дата рег-ции: Янв. 2010  
Откуда: Россия, Москва


Помог: 1 раз(а)




DeepVarvar, отличная функция, чета типа того сделал

PHP:
скопировать код в буфер обмена
  1.       function paginator($page,$pages,$get) {
  2.               if (isset($_GET['page']) && $page!=0) {$paginator .= ' <a href="?'.$get.$page.'">‹</a> ';}
  3.               if ($page > 3) $paginator .= ' <a href="?'.$get.'1">1</a> ... ';
  4.               for ($i = ($page - 2); $i < ($page + 5); $i++) {
  5.                       if ($i > 0 && $i < $pages+1) {
  6.                               if ($i == ($page + 1)) {$alink = ' <b>'.$i.'</b> ';}
  7.                               else {$alink = ' <a href="?'.$get.$i.'">'.$i.'</a> ';}
  8.                               $paginator .= $alink;
  9.                               }
  10.                       }
  11.               if ($page < $pages-4) $paginator .= ' ... <a href="?'.$get.$pages.'">'.$pages.'</a> ';
  12.               if (isset($_GET['page']) && $page <= $pages-2) $paginator .= ' <a href="?'.$get.($page+2).'">›</a> ';
  13.               return $paginator;
  14.               }
  15. echo paginator($page-1,$total,$get);//с учетом нуля
  16.  

(Отредактировано автором: 13 Апреля, 2011 - 16:19:31)



-----
Для некоторых лучший способ написать что-нибудь осмысленное - это сесть _опой на клавиатуру.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB